1 /* Test composite type of VLA and fixed-size array: should be the
2 fixed-size type. Bug 22192. */
3 /* Origin: Joseph Myers <joseph@codesourcery.com> */
4 /* { dg-do compile } */
5 /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
7 /* Test that the given expression (of pointer-to-array type) points to
8 the right sort of array. */
9 #define TEST_FIXED_SIZE(a) do { static int x[sizeof(*(a))]; (void)x; } while (0)
10 #define TEST_VLA(a) do { (void)sizeof(*(a)); (void)(1 ? (a) : (__typeof__(**(a)) (*)[1])0); (void)(1 ? (a) : (__typeof__(**(a)) (*)[2])0); } while (0)
11 #define TEST_INCOMPLETE(a) do { __typeof__(*(a)) x = { 0 }; (void)x; (void)(1 ? a : (__typeof__(**(a)) (*)[1])0); (void)(1 ? a : (__typeof__(**(a)) (*)[2])0); } while (0)
13 #define TEST_COMP_FIX(a, b) TEST_FIXED_SIZE(i ? a : b)
14 #define TEST_COMP_VLA(a, b) TEST_VLA(i ? a : b)
15 #define TEST_COMP_INC(a, b) TEST_INCOMPLETE(i ? a : b)
27 TEST_COMP_FIX(pf
, pf
);
28 TEST_COMP_FIX(pf
, pv
);
29 TEST_COMP_FIX(pf
, pi
);
30 TEST_COMP_FIX(pf
, pfI
);
31 TEST_COMP_FIX(pf
, pvI
);
32 TEST_COMP_FIX(pf
, piI
);
33 TEST_COMP_FIX(pv
, pf
);
34 TEST_COMP_VLA(pv
, pv
);
35 TEST_COMP_VLA(pv
, pi
);
36 TEST_COMP_FIX(pv
, pfI
);
37 TEST_COMP_VLA(pv
, pvI
);
38 TEST_COMP_VLA(pv
, piI
);
39 TEST_COMP_FIX(pi
, pf
);
40 TEST_COMP_VLA(pi
, pv
);
41 TEST_COMP_INC(pi
, pi
);
42 TEST_COMP_FIX(pi
, pfI
);
43 TEST_COMP_VLA(pi
, pvI
);
44 TEST_COMP_INC(pi
, piI
);
45 TEST_COMP_FIX(pfI
, pf
);
46 TEST_COMP_FIX(pfI
, pv
);
47 TEST_COMP_FIX(pfI
, pi
);
48 TEST_COMP_FIX(pfI
, pfI
);
49 TEST_COMP_FIX(pfI
, pvI
);
50 TEST_COMP_FIX(pfI
, piI
);
51 TEST_COMP_FIX(pvI
, pf
);
52 TEST_COMP_VLA(pvI
, pv
);
53 TEST_COMP_VLA(pvI
, pi
);
54 TEST_COMP_FIX(pvI
, pfI
);
55 TEST_COMP_VLA(pvI
, pvI
);
56 TEST_COMP_VLA(pvI
, piI
);
57 TEST_COMP_FIX(piI
, pf
);
58 TEST_COMP_VLA(piI
, pv
);
59 TEST_COMP_INC(piI
, pi
);
60 TEST_COMP_FIX(piI
, pfI
);
61 TEST_COMP_VLA(piI
, pvI
);
62 TEST_COMP_INC(piI
, piI
);
71 TEST_COMP_FIX(qf
, qf
);
72 TEST_COMP_FIX(qf
, qv
);
73 TEST_COMP_FIX(qf
, qi
);
74 TEST_COMP_FIX(qf
, rf
);
75 TEST_COMP_FIX(qf
, rv
);
76 TEST_COMP_FIX(qf
, ri
);
77 TEST_COMP_FIX(qv
, qf
);
78 TEST_COMP_VLA(qv
, qv
);
79 TEST_COMP_VLA(qv
, qi
);
80 TEST_COMP_FIX(qv
, rf
);
81 TEST_COMP_VLA(qv
, rv
);
82 TEST_COMP_VLA(qv
, ri
);
83 TEST_COMP_FIX(qi
, qf
);
84 TEST_COMP_VLA(qi
, qv
);
85 TEST_COMP_INC(qi
, qi
);
86 TEST_COMP_FIX(qi
, rf
);
87 TEST_COMP_VLA(qi
, rv
);
88 TEST_COMP_INC(qi
, ri
);
89 TEST_COMP_FIX(rf
, qf
);
90 TEST_COMP_FIX(rf
, qv
);
91 TEST_COMP_FIX(rf
, qi
);
92 TEST_COMP_FIX(rf
, rf
);
93 TEST_COMP_FIX(rf
, rv
);
94 TEST_COMP_FIX(rf
, ri
);
95 TEST_COMP_FIX(rv
, qf
);
96 TEST_COMP_VLA(rv
, qv
);
97 TEST_COMP_VLA(rv
, qi
);
98 TEST_COMP_FIX(rv
, rf
);
99 TEST_COMP_VLA(rv
, rv
);
100 TEST_COMP_VLA(rv
, ri
);
101 TEST_COMP_FIX(ri
, qf
);
102 TEST_COMP_VLA(ri
, qv
);
103 TEST_COMP_INC(ri
, qi
);
104 TEST_COMP_FIX(ri
, rf
);
105 TEST_COMP_VLA(ri
, rv
);
106 TEST_COMP_INC(ri
, ri
);