1 /* { dg-options "-msve-vector-bits=256 -W -Wall" } */
5 #define N __ARM_FEATURE_SVE_BITS
6 #define FIXED_ATTR __attribute__ ((arm_sve_vector_bits (N)))
7 #define ALIGNED_ATTR __attribute__((aligned(N / 8)))
10 typedef __SVInt8_t var2
;
12 typedef const var1 const_var1
;
13 typedef const var2 const_var2
;
15 typedef var1 aligned_var1 ALIGNED_ATTR
;
16 typedef var2 aligned_var2 ALIGNED_ATTR
;
18 typedef var1 fixed1 FIXED_ATTR
;
19 typedef var1 fixed1_alias FIXED_ATTR
;
20 typedef var2 fixed2 FIXED_ATTR
;
22 typedef const_var1 const_fixed1 FIXED_ATTR
;
23 typedef const var1 const_fixed1_alias FIXED_ATTR
;
24 typedef const_var2 const_fixed2 FIXED_ATTR
;
26 typedef aligned_var1 aligned_fixed1 FIXED_ATTR
;
27 typedef var1 aligned_fixed1_alias FIXED_ATTR ALIGNED_ATTR
;
28 typedef aligned_var2 aligned_fixed2 FIXED_ATTR
;
30 extern fixed1 extern1
;
31 extern fixed1_alias extern1_alias
;
32 extern fixed2 extern2
;
34 extern const_fixed1 const_extern1
;
35 extern const_fixed1_alias const_extern1_alias
;
36 extern const_fixed2 const_extern2
;
38 fixed1
*ptr1a
= &extern1
;
39 fixed1_alias
*ptr1b
= &extern1
;
40 fixed2
*ptr1c
= &extern1
;
42 fixed1
*ptr2a
= &extern1_alias
;
43 fixed1_alias
*ptr2b
= &extern1_alias
;
44 fixed2
*ptr2c
= &extern1_alias
;
46 fixed1
*ptr3a
= &extern2
;
47 fixed1_alias
*ptr3b
= &extern2
;
48 fixed2
*ptr3c
= &extern2
;
50 fixed1
*ptr4a
= &const_extern1
; // { dg-error {invalid conversion} "c++" { target c++ } }
51 // { dg-warning {discards 'const' qualifier} "c" { target c } .-1 }
52 fixed1_alias
*ptr4b
= &const_extern1
; // { dg-error {invalid conversion} "c++" { target c++ } }
53 // { dg-warning {discards 'const' qualifier} "c" { target c } .-1 }
54 fixed2
*ptr4c
= &const_extern1
; // { dg-error {invalid conversion} "c++" { target c++ } }
55 // { dg-warning {discards 'const' qualifier} "c" { target c } .-1 }
57 const fixed1
*ptr5a
= &const_extern2
;
58 const fixed1_alias
*ptr5b
= &const_extern2
;
59 const fixed2
*ptr5c
= &const_extern2
;
61 const_fixed1
*const_ptr1a
= &extern1
;
62 const_fixed1_alias
*const_ptr1b
= &extern1
;
63 const_fixed2
*const_ptr1c
= &extern1
;
65 const_fixed1
*const_ptr2a
= &extern1_alias
;
66 const_fixed1_alias
*const_ptr2b
= &extern1_alias
;
67 const_fixed2
*const_ptr2c
= &extern1_alias
;
69 const_fixed1
*const_ptr3a
= &extern2
;
70 const_fixed1_alias
*const_ptr3b
= &extern2
;
71 const_fixed2
*const_ptr3c
= &extern2
;
73 const_fixed1
*const_ptr4a
= &const_extern1
;
74 const_fixed1_alias
*const_ptr4b
= &const_extern1
;
75 const_fixed2
*const_ptr4c
= &const_extern1
;
77 const_fixed1
*const_ptr5a
= &const_extern1_alias
;
78 const_fixed1_alias
*const_ptr5b
= &const_extern1_alias
;
79 const_fixed2
*const_ptr5c
= &const_extern1_alias
;
81 const_fixed1
*const_ptr6a
= &const_extern2
;
82 const_fixed1_alias
*const_ptr6b
= &const_extern2
;
83 const_fixed2
*const_ptr6c
= &const_extern2
;
85 struct normal1
{ int x
; fixed1 y
; };
86 struct normal1_alias
{ int x
; fixed1_alias y
; };
87 struct normal2
{ int x
; fixed2 y
; };
89 struct aligned1
{ int x
; aligned_fixed1 y
; };
90 struct aligned1_alias
{ int x
; aligned_fixed1_alias y
; };
91 struct aligned2
{ int x
; aligned_fixed2 y
; };
93 #define ASSERT(NAME, TEST) typedef int NAME[(TEST) ? 1 : -1]
95 ASSERT (check_normal1
, sizeof (struct normal1
) == N
/ 8 + 16);
96 ASSERT (check_normal1_alias
, sizeof (struct normal1_alias
) == N
/ 8 + 16);
97 ASSERT (check_normal2
, sizeof (struct normal2
) == N
/ 8 + 16);
99 ASSERT (check_aligned1
, sizeof (struct aligned1
) == N
/ 4);
100 ASSERT (check_aligned1_alias
, sizeof (struct aligned1_alias
) == N
/ 4);
101 ASSERT (check_aligned2
, sizeof (struct aligned2
) == N
/ 4);