Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/init/array56.C @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
145:1830386684a0 | 152:2b5abeee2509 |
---|---|
1 /* PR c++/90938 - Initializing array with {1} works, but not {0} | |
2 { dg-do compile { target c++11 } } | |
3 { dg-options "-O -Wall -fdump-tree-optimized" } */ | |
4 | |
5 #define assert(e) \ | |
6 ((e) ? (void)0 \ | |
7 : (__builtin_printf ("assertion failed on line %i: %s\n", \ | |
8 __LINE__, #e), \ | |
9 __builtin_abort ())) | |
10 | |
11 namespace A { | |
12 | |
13 struct X | |
14 { | |
15 X () = default; | |
16 X (int n) : n (n + 1) { } | |
17 int n; | |
18 }; | |
19 | |
20 static_assert (__is_trivial (X), "X is trivial"); | |
21 | |
22 static void test () | |
23 { | |
24 { | |
25 X x[] { 0 }; | |
26 assert (1 == x->n); | |
27 } | |
28 | |
29 { | |
30 X x[1] { 0 }; | |
31 assert (1 == x->n); // fails | |
32 } | |
33 | |
34 { | |
35 X x[2] { 0 }; | |
36 assert (1 == x[0].n && 0 == x[1].n); // fails | |
37 } | |
38 | |
39 { | |
40 X x[] { 1, 0 }; | |
41 assert (2 == x[0].n && 1 == x[1].n); // passes | |
42 } | |
43 | |
44 { | |
45 X x[2] { 1, 0 }; | |
46 assert (2 == x[0].n && 1 == x[1].n); // fails | |
47 } | |
48 } | |
49 | |
50 } | |
51 | |
52 namespace B { | |
53 | |
54 struct X | |
55 { | |
56 X () = default; | |
57 X (int *p) : p (p ? p : new int (1)) { } | |
58 int *p; | |
59 }; | |
60 | |
61 static_assert (__is_trivial (X), "X is trivial"); | |
62 | |
63 static void test () | |
64 { | |
65 X x[1] { nullptr }; | |
66 assert (*x->p == 1); // fails | |
67 | |
68 X y[1] { 0 }; | |
69 assert (*y->p == 1); // fails | |
70 } | |
71 | |
72 } | |
73 | |
74 namespace C { | |
75 | |
76 static const char *vector_swizzle (int vecsize, int index) | |
77 { | |
78 static const char *swizzle[4][4] = | |
79 { | |
80 { ".x", ".y", ".z", ".w" }, | |
81 { ".xy", ".yz", ".zw", nullptr }, | |
82 { ".xyz", ".yzw", nullptr, nullptr }, | |
83 { "", nullptr, nullptr, nullptr }, | |
84 }; | |
85 | |
86 assert (vecsize >= 1 && vecsize <= 4); | |
87 assert (index >= 0 && index < 4); | |
88 assert (swizzle[vecsize - 1][index]); | |
89 | |
90 return swizzle[vecsize - 1][index]; | |
91 } | |
92 | |
93 static void test () | |
94 { | |
95 assert (!*vector_swizzle(4, 0)); | |
96 } | |
97 | |
98 } | |
99 | |
100 int main () | |
101 { | |
102 A::test (); | |
103 B::test (); | |
104 C::test (); | |
105 } | |
106 | |
107 // { dg-final { scan-tree-dump-not "abort" "optimized" } } |