| /* PR target/92499 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -mgpopt=global -G8" } */ |
| |
| /* Check placement and addressing of flexibly-sized objects with external |
| linkage. */ |
| |
| enum { size = 100 }; |
| |
| struct flexible |
| { |
| int length; |
| int data[]; |
| }; |
| |
| extern struct flexible global_flexible; |
| struct flexible global_flexible = |
| { |
| .data = { [size - 1] = 0, } |
| }; |
| |
| extern struct flexible global_flexible_nonzero; |
| struct flexible global_flexible_nonzero = |
| { |
| .length = size, |
| .data = { [size - 1] = 0, } |
| }; |
| |
| struct flexible * |
| get_global_flexible (void) |
| { |
| return &global_flexible; |
| } |
| |
| struct flexible * |
| get_global_flexible_nonzero (void) |
| { |
| return &global_flexible_nonzero; |
| } |
| |
| /* To preserve ABI compatibility we place the flexibly-sized objects in |
| small data sections. */ |
| |
| /* { dg-final { scan-assembler-times "\\.sdata" 1 } } */ |
| /* { dg-final { scan-assembler-times "\\.sbss" 1 } } */ |