| /* PR target/92499 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -mgpopt=global -G8" } */ |
| |
| /* Check placement and addressing of flexibly-sized objects with internal |
| linkage. */ |
| |
| enum { size = 100 }; |
| |
| struct flexible |
| { |
| int length; |
| int data[]; |
| }; |
| |
| static struct flexible local_flexible = |
| { |
| .data = { [size - 1] = 0, } |
| }; |
| |
| static struct flexible local_flexible_nonzero = |
| { |
| .length = size, |
| .data = { [size - 1] = 0, } |
| }; |
| |
| struct flexible * |
| get_local_flexible (void) |
| { |
| return &local_flexible; |
| } |
| |
| struct flexible * |
| get_local_flexible_nonzero (void) |
| { |
| return &local_flexible_nonzero; |
| } |
| |
| /* We should not place the flexibly-sized objects in small data |
| sections, or generate gp-relative addresses for them. */ |
| |
| /* { dg-final { scan-assembler-not "\\.sdata" } } */ |
| /* { dg-final { scan-assembler-not "\\.sbss" } } */ |
| /* { dg-final { scan-assembler-not "%gprel\(.*flexible.*\)" } } */ |
| |
| |
| |
| |