1 /* PR target/92499 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -mgpopt=global -G8" } */
4
5 /* Check placement and addressing of flexibly-sized objects with external
6 linkage. */
7
8 enum { size = 100 };
9
10 struct flexible
11 {
12 int length;
13 int data[];
14 };
15
16 extern struct flexible global_flexible;
17 struct flexible global_flexible =
18 {
19 .data = { [size - 1] = 0, }
20 };
21
22 extern struct flexible global_flexible_nonzero;
23 struct flexible global_flexible_nonzero =
24 {
25 .length = size,
26 .data = { [size - 1] = 0, }
27 };
28
29 struct flexible *
30 get_global_flexible (void)
31 {
32 return &global_flexible;
33 }
34
35 struct flexible *
36 get_global_flexible_nonzero (void)
37 {
38 return &global_flexible_nonzero;
39 }
40
41 /* To preserve ABI compatibility we place the flexibly-sized objects in
42 small data sections. */
43
44 /* { dg-final { scan-assembler-times "\\.sdata" 1 } } */
45 /* { dg-final { scan-assembler-times "\\.sbss" 1 } } */