1 /* Test support of scalar_storage_order attribute */
3 /* { dg-do compile } */
5 struct __attribute__((scalar_storage_order("big-endian"))) S1
10 struct __attribute__((scalar_storage_order("little-endian"))) S2
15 struct __attribute__((scalar_storage_order("other"))) S3
{ int i
; }; /* { dg-error "must be one of .big-endian. or .little-endian." } */
17 void incompatible_assign (struct S1
*s1
, struct S2
*s2
)
19 *s1
= *s2
; /* { dg-error "(incompatible types|no match)" } */
22 int *addr1 (int which
, struct S1
*s1
, struct S2
*s2
)
24 return (which
== 1 ? &s1
->i
: &s2
->i
); /* { dg-error "address of scalar with reverse storage order" } */
27 struct __attribute__((scalar_storage_order("big-endian"))) S4
33 struct __attribute__((scalar_storage_order("little-endian"))) S5
39 void *addr2 (int which
, struct S4
*s4
, struct S5
*s5
)
41 return (which
== 1 ? (void *)s4
->a
: (void *)s5
->a
); /* { dg-warning "address of array with reverse scalar storage order" } */
44 void *addr3 (int which
, struct S4
*s4
, struct S5
*s5
)
46 return (which
== 1 ? (void *)&s4
->a
: (void *)&s5
->a
); /* { dg-warning "address of array with reverse scalar storage order" } */
49 void *addr4 (int which
, struct S4
*s4
, struct S5
*s5
)
51 return (which
== 1 ? (void *)&s4
->a
[0] : (void *)&s5
->a
[0]); /* { dg-error "address of scalar with reverse storage order" } */
54 void *addr5 (int which
, struct S4
*s4
, struct S5
*s5
)
56 return (which
== 1 ? (void *)&s4
->s2
: (void *) &s5
->s1
); /* ok */
59 struct __attribute__((scalar_storage_order("big-endian"))) S6
65 struct __attribute__((scalar_storage_order("little-endian"))) S7
71 void *addr6 (int which
, struct S6
*s6
, struct S7
*s7
)
73 return (which
== 1 ? (void *)s6
->a
: (void *)s7
->a
); /* { dg-warning "address of array with reverse scalar storage order" } */
76 void *addr7 (int which
, struct S6
*s6
, struct S7
*s7
)
78 return (which
== 1 ? (void *)&s6
->a
: (void *)&s7
->a
); /* { dg-warning "address of array with reverse scalar storage order" } */
81 void *addr8 (int which
, struct S6
*s6
, struct S7
*s7
)
83 return (which
== 1 ? (void *)&s6
->a
[0] : (void *)&s7
->a
[0]); /* { dg-warning "address of array with reverse scalar storage order" } */
86 void *addr9 (int which
, struct S6
*s6
, struct S7
*s7
)
88 return (which
== 1 ? (void *)&s6
->a
[0][0] : (void *)&s7
->a
[0][0]); /* { dg-error "address of scalar with reverse storage order" } */
91 void *addr10 (int which
, struct S6
*s6
, struct S7
*s7
)
93 return (which
== 1 ? (void *)&s6
->s2
: (void *)&s7
->s1
); /* ok */