author | coleenp |
Thu, 10 Jan 2019 15:13:51 -0500 | |
changeset 53244 | 9807daeb47c4 |
parent 49653 | a569cb4425f3 |
child 53757 | e31f39e088b7 |
permissions | -rw-r--r-- |
1 | 1 |
/* |
53244
9807daeb47c4
8216167: Update include guards to reflect correct directories
coleenp
parents:
49653
diff
changeset
|
2 |
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. |
1 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
7 |
* published by the Free Software Foundation. |
|
8 |
* |
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
13 |
* accompanied this code). |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU General Public License version |
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 |
* |
|
5547
f4b087cbb361
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
5403
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
f4b087cbb361
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
5403
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
f4b087cbb361
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
5403
diff
changeset
|
21 |
* questions. |
1 | 22 |
* |
23 |
*/ |
|
24 |
||
53244
9807daeb47c4
8216167: Update include guards to reflect correct directories
coleenp
parents:
49653
diff
changeset
|
25 |
#ifndef SHARE_UTILITIES_DEBUG_HPP |
9807daeb47c4
8216167: Update include guards to reflect correct directories
coleenp
parents:
49653
diff
changeset
|
26 |
#define SHARE_UTILITIES_DEBUG_HPP |
7397 | 27 |
|
46560
388aa8d67c80
8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents:
44408
diff
changeset
|
28 |
#include "utilities/breakpoint.hpp" |
388aa8d67c80
8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents:
44408
diff
changeset
|
29 |
#include "utilities/compilerWarnings.hpp" |
388aa8d67c80
8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents:
44408
diff
changeset
|
30 |
#include "utilities/macros.hpp" |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
31 |
|
46560
388aa8d67c80
8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents:
44408
diff
changeset
|
32 |
#include <stddef.h> |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
33 |
|
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
34 |
// ShowRegistersOnAssert support (for now Linux only) |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
35 |
#if defined(LINUX) && !defined(ZERO) |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
36 |
#define CAN_SHOW_REGISTERS_ON_ASSERT |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
37 |
extern char* g_assert_poison; |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
38 |
#define TOUCH_ASSERT_POISON (*g_assert_poison) = 'X'; |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
39 |
void initialize_assert_poison(); |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
40 |
bool handle_assert_poison_fault(const void* ucVoid, const void* faulting_address); |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
41 |
#else |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
42 |
#define TOUCH_ASSERT_POISON |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
43 |
#endif // CAN_SHOW_REGISTERS_ON_ASSERT |
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
44 |
|
1 | 45 |
// assertions |
28477 | 46 |
#ifndef ASSERT |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
47 |
#define vmassert(p, ...) |
28477 | 48 |
#else |
49 |
// Note: message says "assert" rather than "vmassert" for backward |
|
50 |
// compatibility with tools that parse/match the message text. |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
51 |
// Note: The signature is vmassert(p, format, ...), but the solaris |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
52 |
// compiler can't handle an empty ellipsis in a macro without a warning. |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
53 |
#define vmassert(p, ...) \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
54 |
do { \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
55 |
if (!(p)) { \ |
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
56 |
TOUCH_ASSERT_POISON; \ |
38254 | 57 |
if (is_executing_unit_tests()) { \ |
58 |
report_assert_msg(__VA_ARGS__); \ |
|
59 |
} \ |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
60 |
report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", __VA_ARGS__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
61 |
BREAKPOINT; \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
62 |
} \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
63 |
} while (0) |
28477 | 64 |
#endif |
1 | 65 |
|
28477 | 66 |
// For backward compatibility. |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
67 |
#define assert(p, ...) vmassert(p, __VA_ARGS__) |
28477 | 68 |
|
44408 | 69 |
#ifndef ASSERT |
70 |
#define vmassert_status(p, status, msg) |
|
71 |
#else |
|
28477 | 72 |
// This version of vmassert is for use with checking return status from |
1 | 73 |
// library calls that return actual error values eg. EINVAL, |
74 |
// ENOMEM etc, rather than returning -1 and setting errno. |
|
75 |
// When the status is not what is expected it is very useful to know |
|
76 |
// what status was actually returned, so we pass the status variable as |
|
77 |
// an extra arg and use strerror to convert it to a meaningful string |
|
78 |
// like "Invalid argument", "out of memory" etc |
|
28477 | 79 |
#define vmassert_status(p, status, msg) \ |
37113 | 80 |
do { \ |
81 |
if (!(p)) { \ |
|
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
82 |
TOUCH_ASSERT_POISON; \ |
37113 | 83 |
report_vm_status_error(__FILE__, __LINE__, "assert(" #p ") failed", \ |
84 |
status, msg); \ |
|
85 |
BREAKPOINT; \ |
|
86 |
} \ |
|
87 |
} while (0) |
|
44408 | 88 |
#endif |
1 | 89 |
|
28477 | 90 |
// For backward compatibility. |
91 |
#define assert_status(p, status, msg) vmassert_status(p, status, msg) |
|
1 | 92 |
|
28477 | 93 |
// guarantee is like vmassert except it's always executed -- use it for |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
94 |
// cheap tests that catch errors that would otherwise be hard to find. |
1 | 95 |
// guarantee is also used for Verify options. |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
96 |
#define guarantee(p, ...) \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
97 |
do { \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
98 |
if (!(p)) { \ |
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
99 |
TOUCH_ASSERT_POISON; \ |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
100 |
report_vm_error(__FILE__, __LINE__, "guarantee(" #p ") failed", __VA_ARGS__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
101 |
BREAKPOINT; \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
102 |
} \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
103 |
} while (0) |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
104 |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
105 |
#define fatal(...) \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
106 |
do { \ |
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
107 |
TOUCH_ASSERT_POISON; \ |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
108 |
report_fatal(__FILE__, __LINE__, __VA_ARGS__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
109 |
BREAKPOINT; \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
110 |
} while (0) |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
111 |
|
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
112 |
// out of memory |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
113 |
#define vm_exit_out_of_memory(size, vm_err_type, ...) \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
114 |
do { \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
115 |
report_vm_out_of_memory(__FILE__, __LINE__, size, vm_err_type, __VA_ARGS__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
116 |
BREAKPOINT; \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
117 |
} while (0) |
1 | 118 |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
119 |
#define ShouldNotCallThis() \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
120 |
do { \ |
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
121 |
TOUCH_ASSERT_POISON; \ |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
122 |
report_should_not_call(__FILE__, __LINE__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
123 |
BREAKPOINT; \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
124 |
} while (0) |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
125 |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
126 |
#define ShouldNotReachHere() \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
127 |
do { \ |
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
128 |
TOUCH_ASSERT_POISON; \ |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
129 |
report_should_not_reach_here(__FILE__, __LINE__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
130 |
BREAKPOINT; \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
131 |
} while (0) |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
132 |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
133 |
#define Unimplemented() \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
134 |
do { \ |
49653
a569cb4425f3
8191101: Show register content in hs-err file on assert
stuefe
parents:
47216
diff
changeset
|
135 |
TOUCH_ASSERT_POISON; \ |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
136 |
report_unimplemented(__FILE__, __LINE__); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
137 |
BREAKPOINT; \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
138 |
} while (0) |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
139 |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
140 |
#define Untested(msg) \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
141 |
do { \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
142 |
report_untested(__FILE__, __LINE__, msg); \ |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
143 |
BREAKPOINT; \ |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
144 |
} while (0); |
1 | 145 |
|
17087
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
146 |
|
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
147 |
// types of VM error - originally in vmError.hpp |
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
148 |
enum VMErrorType { |
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
149 |
INTERNAL_ERROR = 0xe0000000, |
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
150 |
OOM_MALLOC_ERROR = 0xe0000001, |
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
151 |
OOM_MMAP_ERROR = 0xe0000002 |
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
152 |
}; |
f0b76c4c93a0
8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents:
16370
diff
changeset
|
153 |
|
1 | 154 |
// error reporting helper functions |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
155 |
void report_vm_error(const char* file, int line, const char* error_msg); |
33142
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
156 |
#if !defined(__GNUC__) || defined (__clang_major__) || (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || __GNUC__ > 4) |
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
157 |
// ATTRIBUTE_PRINTF works with gcc >= 4.8 and any other compiler. |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
158 |
void report_vm_error(const char* file, int line, const char* error_msg, |
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
159 |
const char* detail_fmt, ...) ATTRIBUTE_PRINTF(4, 5); |
38254 | 160 |
#ifdef ASSERT |
161 |
void report_assert_msg(const char* msg, ...) ATTRIBUTE_PRINTF(1, 2); |
|
162 |
#endif // ASSERT |
|
33142
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
163 |
#else |
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
164 |
// GCC < 4.8 warns because of empty format string. Warning can not be switched off selectively. |
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
165 |
void report_vm_error(const char* file, int line, const char* error_msg, |
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
166 |
const char* detail_fmt, ...); |
38254 | 167 |
#ifdef ASSERT |
168 |
void report_assert_msg(const char* msg, ...); |
|
169 |
#endif // ASSERT |
|
33142
399fdb935d28
8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents:
33105
diff
changeset
|
170 |
#endif |
37113 | 171 |
void report_vm_status_error(const char* file, int line, const char* error_msg, |
172 |
int status, const char* detail); |
|
33105
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
173 |
void report_fatal(const char* file, int line, const char* detail_fmt, ...) ATTRIBUTE_PRINTF(3, 4); |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
174 |
void report_vm_out_of_memory(const char* file, int line, size_t size, VMErrorType vm_err_type, |
294e48b4f704
8080775: Better argument formatting for assert() and friends
david
parents:
31340
diff
changeset
|
175 |
const char* detail_fmt, ...) ATTRIBUTE_PRINTF(5, 6); |
5403
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
176 |
void report_should_not_call(const char* file, int line); |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
177 |
void report_should_not_reach_here(const char* file, int line); |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
178 |
void report_unimplemented(const char* file, int line); |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
179 |
void report_untested(const char* file, int line, const char* message); |
6b0dd9c75dde
6888954: argument formatting for assert() and friends
jcoomes
parents:
1
diff
changeset
|
180 |
|
38254 | 181 |
#ifdef ASSERT |
182 |
// unit test support |
|
183 |
bool is_executing_unit_tests(); |
|
184 |
#endif // ASSERT |
|
185 |
||
24424
2658d7834c6e
8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents:
23515
diff
changeset
|
186 |
void warning(const char* format, ...) ATTRIBUTE_PRINTF(1, 2); |
1 | 187 |
|
28480 | 188 |
// Compile-time asserts. Cond must be a compile-time constant expression that |
189 |
// is convertible to bool. STATIC_ASSERT() can be used anywhere a declaration |
|
190 |
// may appear. |
|
191 |
// |
|
192 |
// Implementation Note: STATIC_ASSERT_FAILURE<true> provides a value member |
|
193 |
// rather than type member that could be used directly in the typedef, because |
|
194 |
// a type member would require conditional use of "typename", depending on |
|
195 |
// whether Cond is dependent or not. The use of a value member leads to the |
|
196 |
// use of an array type. |
|
19285
0a3b3f115402
8022880: False sharing between PSPromotionManager instances
stefank
parents:
18683
diff
changeset
|
197 |
|
28480 | 198 |
template<bool x> struct STATIC_ASSERT_FAILURE; |
199 |
template<> struct STATIC_ASSERT_FAILURE<true> { enum { value = 1 }; }; |
|
200 |
||
29691 | 201 |
#define STATIC_ASSERT(Cond) \ |
31340
2f9ff278bb13
8086027: Multiple STATIC_ASSERTs at class scope doesn't work
kbarrett
parents:
29691
diff
changeset
|
202 |
typedef char PASTE_TOKENS(STATIC_ASSERT_DUMMY_TYPE_, __LINE__)[ \ |
2f9ff278bb13
8086027: Multiple STATIC_ASSERTs at class scope doesn't work
kbarrett
parents:
29691
diff
changeset
|
203 |
STATIC_ASSERT_FAILURE< (Cond) >::value ] |
19285
0a3b3f115402
8022880: False sharing between PSPromotionManager instances
stefank
parents:
18683
diff
changeset
|
204 |
|
1 | 205 |
// out of memory reporting |
206 |
void report_java_out_of_memory(const char* message); |
|
207 |
||
53244
9807daeb47c4
8216167: Update include guards to reflect correct directories
coleenp
parents:
49653
diff
changeset
|
208 |
#endif // SHARE_UTILITIES_DEBUG_HPP |