1 /* Check alignment convention in the vector ABI. */ 2 3 /* { dg-do compile { target { s390*-*-* } } } */ 4 /* { dg-options "-O3 -mzarch -march=z13" } */ 5 6 #include <stddef.h> 7 8 /* Vector types get an 8 byte alignment. */ 9 typedef double v2df __attribute__((vector_size(16))); 10 typedef struct 11 { 12 char a; 13 v2df b; 14 } A; 15 char c1[offsetof (A, b) == 8 ? 0 : -1]; 16 17 /* Smaller vector allow for smaller alignments. */ 18 typedef char v4qi __attribute__((vector_size(4))); 19 typedef struct 20 { 21 char a; 22 v4qi b; 23 } B; 24 char c2[offsetof (B, b) == 4 ? 0 : -1]; 25 26 27 typedef double v4df __attribute__((vector_size(32))); 28 typedef struct 29 { 30 char a; 31 v4df b; 32 } C; 33 char c3[offsetof (C, b) == 8 ? 0 : -1]; 34 35 /* However, we allow the programmer to chose a bigger alignment. */ 36 typedef struct 37 { 38 char a; 39 v2df b __attribute__((aligned(16))); 40 } D; 41 char c4[offsetof (D, b) == 16 ? 0 : -1]; 42 43 typedef struct 44 { 45 char a; 46 v2df b; 47 } __attribute__((packed)) E; 48 char c5[offsetof (E, b) == 1 ? 0 : -1]; 49