annotate gcc/testsuite/g++.dg/ext/flexary12.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR c++/69290 - [6 Regression] g++ ICE on invalid initialization
kono
parents:
diff changeset
2 // of a flexible array member
kono
parents:
diff changeset
3 // { dg-do compile }
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 // Suppress pedantic errors about initialization of a flexible array member.
kono
parents:
diff changeset
6 // { dg-options "-Wno-pedantic" }
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 struct A {
kono
parents:
diff changeset
9 int a []; // { dg-error "flexible array member .A::a. in an otherwise empty .struct A." }
kono
parents:
diff changeset
10 };
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 void f1 ()
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 // This is the meat of the test from c++/69290:
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
15 static struct A a
111
kono
parents:
diff changeset
16 = { "c" }; // { dg-error "invalid conversion from .const char\\*. to .int." }
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 (void)&a;
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 // Exercise other forms of invalid initialization besides the one in the bug.
kono
parents:
diff changeset
23 struct B {
kono
parents:
diff changeset
24 int n;
kono
parents:
diff changeset
25 int a [];
kono
parents:
diff changeset
26 };
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 void f2 ()
kono
parents:
diff changeset
29 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
30 static struct B b1
111
kono
parents:
diff changeset
31 = { 0, "c" }; // { dg-error "invalid conversion from .const char\\*. to .int." }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 (void)&b1;
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 const char s[] = "c";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
36 static struct B b2
111
kono
parents:
diff changeset
37 = { 0, s }; // { dg-error "invalid conversion from .const char\\*. to .int." }
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 (void)&b2;
kono
parents:
diff changeset
40 }
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 struct D {
kono
parents:
diff changeset
43 int a []; // { dg-error "flexible array member .D::a. in an otherwise empty .struct D." }
kono
parents:
diff changeset
44 D ();
kono
parents:
diff changeset
45 };
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 D::D (): // { dg-error "initializer for flexible array member" }
kono
parents:
diff changeset
48 a ("c") // the initializer also has an invalid type but emitting
kono
parents:
diff changeset
49 // just the error above is sufficient
kono
parents:
diff changeset
50 { }
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 template <class T>
kono
parents:
diff changeset
54 struct C {
kono
parents:
diff changeset
55 T a []; // { dg-error "flexible array member" }
kono
parents:
diff changeset
56 };
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 void f3 ()
kono
parents:
diff changeset
59 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
60 static struct C<double> cd
111
kono
parents:
diff changeset
61 = { "c" }; // { dg-error "cannot convert .const char\\*. to .double." }
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 (void)&cd;
kono
parents:
diff changeset
64 }