annotate gcc/testsuite/g++.dg/cpp0x/pr83993.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // PR c++/83993
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-options "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 extern const int a[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 const int b[5] = { 1, 2, 3, 4, 5 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 extern const int c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 constexpr const int *d = &a[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 constexpr const int *d2 = a;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
10 constexpr const int *e = &a[1]; // { dg-error "nonzero array subscript '1' is used with array 'a' of type 'const int \\\[\\\]' with unknown bounds" }
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 constexpr const int *f = &b[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 constexpr const int *f2 = b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 constexpr const int *g = &b[5];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 constexpr const int *h = &b[6]; // { dg-error "array subscript value '6' is outside the bounds of array 'b' of type 'const int \\\[5\\\]'" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 constexpr const int *i = &c[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 constexpr const int *i2 = c;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 constexpr const int *j = &c[4];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 constexpr const int *k = &c[5]; // { dg-error "array subscript value '5' is outside the bounds of array 'c' of type 'const int \\\[4\\\]'" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 extern const int l[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 foo ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 extern const int l[3];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 constexpr const int *m = &l[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 constexpr const int *m2 = l;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 constexpr const int *n = &l[1];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 static_assert (m == m2, "");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 constexpr const int *m = &l[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 constexpr const int *m2 = l;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
33 constexpr const int *n = &l[1]; // { dg-error "nonzero array subscript '1' is used with array 'l' of type 'const int \\\[\\\]' with unknown bounds" }
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 static_assert (d == d2 && f == f2 && i == i2 && m == m2, "");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 const int o[] = { 1, 2 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 constexpr const int *p = &o[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 constexpr const int *p2 = o;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 constexpr const int *q = &o[2];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 constexpr const int *r = &o[3]; // { dg-error "array subscript value '3' is outside the bounds of array 'o' of type 'const int \\\[2\\\]'" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 struct S { char a; char b[]; } s;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 constexpr const char *t = &s.b[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 constexpr const char *t2 = s.b;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
43 constexpr const char *u = &s.b[1]; // { dg-error "nonzero array subscript '1' is used with array of type 'char \\\[\\\]' with unknown bounds" }
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 struct V { int a; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 extern V v[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 constexpr V *w = &v[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 constexpr V *w2 = v;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 constexpr int *x = &v[0].a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 constexpr int y = a[0]; // { dg-error "the value of 'a' is not usable in a constant expression" }