Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/ubsan/pr63956.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
15 // { dg-error "-2 << 4.. is negative" "" { target *-*-* } .-3 } | 15 // { dg-error "-2 << 4.. is negative" "" { target *-*-* } .-3 } |
16 return a; | 16 return a; |
17 } | 17 } |
18 | 18 |
19 constexpr int i1 = fn1 (5, 3); | 19 constexpr int i1 = fn1 (5, 3); |
20 constexpr int i2 = fn1 (5, -2); // { dg-message "in constexpr expansion" } | 20 constexpr int i2 = fn1 (5, -2); // { dg-message "in .constexpr. expansion" } |
21 constexpr int i3 = fn1 (5, sizeof (int) * __CHAR_BIT__); // { dg-message "in constexpr expansion" } | 21 constexpr int i3 = fn1 (5, sizeof (int) * __CHAR_BIT__); // { dg-message "in .constexpr. expansion" } |
22 constexpr int i4 = fn1 (5, 256); // { dg-message "in constexpr expansion" } | 22 constexpr int i4 = fn1 (5, 256); // { dg-message "in .constexpr. expansion" } |
23 constexpr int i5 = fn1 (5, 2); | 23 constexpr int i5 = fn1 (5, 2); |
24 constexpr int i6 = fn1 (-2, 4); // { dg-message "in constexpr expansion" } | 24 constexpr int i6 = fn1 (-2, 4); // { dg-message "in .constexpr. expansion" } |
25 constexpr int i7 = fn1 (0, 2); | 25 constexpr int i7 = fn1 (0, 2); |
26 | 26 |
27 SA (i1 == 40); | 27 SA (i1 == 40); |
28 SA (i5 == 5); | 28 SA (i5 == 5); |
29 SA (i7 == 0); | 29 SA (i7 == 0); |
38 | 38 |
39 return a; | 39 return a; |
40 } | 40 } |
41 | 41 |
42 constexpr int j1 = fn2 (4, 1); | 42 constexpr int j1 = fn2 (4, 1); |
43 constexpr int j2 = fn2 (4, -1); // { dg-message "in constexpr expansion" } | 43 constexpr int j2 = fn2 (4, -1); // { dg-message "in .constexpr. expansion" } |
44 constexpr int j3 = fn2 (10, sizeof (int) * __CHAR_BIT__); // { dg-message "in constexpr expansion" } | 44 constexpr int j3 = fn2 (10, sizeof (int) * __CHAR_BIT__); // { dg-message "in .constexpr. expansion" } |
45 constexpr int j4 = fn2 (1, 256); // { dg-message "in constexpr expansion" } | 45 constexpr int j4 = fn2 (1, 256); // { dg-message "in .constexpr. expansion" } |
46 constexpr int j5 = fn2 (5, 2); | 46 constexpr int j5 = fn2 (5, 2); |
47 constexpr int j6 = fn2 (-2, 4); | 47 constexpr int j6 = fn2 (-2, 4); |
48 constexpr int j7 = fn2 (0, 4); | 48 constexpr int j7 = fn2 (0, 4); |
49 | 49 |
50 SA (j1 == 2); | 50 SA (j1 == 2); |
58 a = a / b; // { dg-error "..7 / 0.. is not a constant expression" } | 58 a = a / b; // { dg-error "..7 / 0.. is not a constant expression" } |
59 return a; | 59 return a; |
60 } | 60 } |
61 | 61 |
62 constexpr int k1 = fn3 (8, 4); | 62 constexpr int k1 = fn3 (8, 4); |
63 constexpr int k2 = fn3 (7, 0); // { dg-message "in constexpr expansion" } | 63 constexpr int k2 = fn3 (7, 0); // { dg-message "in .constexpr. expansion" } |
64 constexpr int k3 = fn3 (INT_MIN, -1); // { dg-error "overflow in constant expression" } | 64 constexpr int k3 = fn3 (INT_MIN, -1); // { dg-error "overflow in constant expression|in .constexpr. expansion of " } |
65 | 65 |
66 SA (k1 == 2); | 66 SA (k1 == 2); |
67 | 67 |
68 constexpr float | 68 constexpr float |
69 fn4 (float a, float b) | 69 fn4 (float a, float b) |
72 a = a / b; // { dg-error "is not a constant expression" } | 72 a = a / b; // { dg-error "is not a constant expression" } |
73 return a; | 73 return a; |
74 } | 74 } |
75 | 75 |
76 constexpr float l1 = fn4 (5.0, 3.0); | 76 constexpr float l1 = fn4 (5.0, 3.0); |
77 constexpr float l2 = fn4 (7.0, 0.0); // { dg-message "in constexpr expansion" } | 77 constexpr float l2 = fn4 (7.0, 0.0); // { dg-message "in .constexpr. expansion" } |
78 | 78 |
79 constexpr int | 79 constexpr int |
80 fn5 (const int *a, int b) | 80 fn5 (const int *a, int b) |
81 { | 81 { |
82 if (b != 2) | 82 if (b != 2) |
84 return b; | 84 return b; |
85 } | 85 } |
86 | 86 |
87 constexpr int m1[4] = { 1, 2, 3, 4 }; | 87 constexpr int m1[4] = { 1, 2, 3, 4 }; |
88 constexpr int m2 = fn5 (m1, 3); | 88 constexpr int m2 = fn5 (m1, 3); |
89 constexpr int m3 = fn5 (m1, 4); // { dg-error "array subscript" } | 89 constexpr int m3 = fn5 (m1, 4); // { dg-error "array subscript|in .constexpr. expansion of " } |
90 | 90 |
91 constexpr int | 91 constexpr int |
92 fn6 (const int &a, int b) | 92 fn6 (const int &a, int b) |
93 { | 93 { |
94 if (b != 2) | 94 if (b != 2) |
104 return 7; | 104 return 7; |
105 } | 105 } |
106 | 106 |
107 constexpr int n1 = 7; | 107 constexpr int n1 = 7; |
108 constexpr int n2 = fn7 (&n1, 5); | 108 constexpr int n2 = fn7 (&n1, 5); |
109 constexpr int n3 = fn7 ((const int *) 0, 8); // { dg-error "null pointer" } | 109 constexpr int n3 = fn7 ((const int *) 0, 8); // { dg-error "null pointer|in .constexpr. expansion of " } |
110 | 110 |
111 constexpr int | 111 constexpr int |
112 fn8 (int i) | 112 fn8 (int i) |
113 { | 113 { |
114 constexpr int g[10] = { }; | 114 constexpr int g[10] = { }; |
115 return g[i]; | 115 return g[i]; |
116 } | 116 } |
117 | 117 |
118 constexpr int o1 = fn8 (9); | 118 constexpr int o1 = fn8 (9); |
119 constexpr int o2 = fn8 (10); // { dg-error "array subscript" } | 119 constexpr int o2 = fn8 (10); // { dg-error "array subscript|in .constexpr. expansion of " } |
120 | 120 |
121 constexpr int | 121 constexpr int |
122 fn9 (int a, int b) | 122 fn9 (int a, int b) |
123 { | 123 { |
124 if (b != 0) | 124 if (b != 0) |
125 return a + b; | 125 return a + b; |
126 return a; | 126 return a; |
127 } | 127 } |
128 | 128 |
129 constexpr int p1 = fn9 (42, 7); | 129 constexpr int p1 = fn9 (42, 7); |
130 constexpr int p2 = fn9 (__INT_MAX__, 1); // { dg-error "overflow in constant expression" } | 130 constexpr int p2 = fn9 (__INT_MAX__, 1); // { dg-error "overflow in constant expression|in .constexpr. expansion of " } |
131 constexpr int p3 = fn9 (__INT_MAX__, -1); | 131 constexpr int p3 = fn9 (__INT_MAX__, -1); |
132 constexpr int p4 = fn9 (INT_MIN, 1); | 132 constexpr int p4 = fn9 (INT_MIN, 1); |
133 constexpr int p5 = fn9 (INT_MIN, -1); // { dg-error "overflow in constant expression" } | 133 constexpr int p5 = fn9 (INT_MIN, -1); // { dg-error "overflow in constant expression|in .constexpr. expansion of " } |
134 | 134 |
135 SA (p1 == 49); | 135 SA (p1 == 49); |
136 SA (p3 == __INT_MAX__ - 1); | 136 SA (p3 == __INT_MAX__ - 1); |
137 SA (p4 == INT_MIN + 1); | 137 SA (p4 == INT_MIN + 1); |
138 | 138 |
143 return a * b; | 143 return a * b; |
144 return a; | 144 return a; |
145 } | 145 } |
146 | 146 |
147 constexpr int q1 = fn10 (10, 10); | 147 constexpr int q1 = fn10 (10, 10); |
148 constexpr int q2 = fn10 (__INT_MAX__, 2); // { dg-error "overflow in constant expression" } | 148 constexpr int q2 = fn10 (__INT_MAX__, 2); // { dg-error "overflow in constant expression|in .constexpr. expansion of " } |
149 constexpr int q3 = fn10 (INT_MIN, 2); // { dg-error "overflow in constant expression" } | 149 constexpr int q3 = fn10 (INT_MIN, 2); // { dg-error "overflow in constant expression|in .constexpr. expansion of " } |
150 constexpr int q4 = fn10 (-1, -1); | 150 constexpr int q4 = fn10 (-1, -1); |
151 | 151 |
152 SA (q1 == 100); | 152 SA (q1 == 100); |
153 SA (q4 == 1); | 153 SA (q4 == 1); |
154 | 154 |
160 return i; | 160 return i; |
161 return i * 2; | 161 return i * 2; |
162 } | 162 } |
163 | 163 |
164 constexpr int r1 = fn11 (3.4); | 164 constexpr int r1 = fn11 (3.4); |
165 constexpr int r2 = fn11 (__builtin_inf ()); // { dg-error "overflow in constant expression" } | 165 constexpr int r2 = fn11 (__builtin_inf ()); // { dg-error "overflow in constant expression|in .constexpr. expansion of " } |
166 | 166 |
167 constexpr int | 167 constexpr int |
168 fn12 (int i) | 168 fn12 (int i) |
169 { | 169 { |
170 if (i == 42) | 170 if (i == 42) |
171 __builtin_unreachable (); // { dg-error "is not a constant expression" } | 171 __builtin_unreachable (); // { dg-error "is not a constant expression" } |
172 return i + 10; | 172 return i + 10; |
173 } | 173 } |
174 | 174 |
175 constexpr int s1 = fn12 (1); | 175 constexpr int s1 = fn12 (1); |
176 constexpr int s2 = fn12 (42); | 176 constexpr int s2 = fn12 (42); // { dg-message "in .constexpr. expansion of " } |
177 | 177 |
178 SA (s1 == 11); | 178 SA (s1 == 11); |