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 internal 6 linkage. */ 7 8 enum { size = 100 }; 9 10 struct flexible 11 { 12 int length; 13 int data[]; 14 }; 15 16 static struct flexible local_flexible = 17 { 18 .data = { [size - 1] = 0, } 19 }; 20 21 static struct flexible local_flexible_nonzero = 22 { 23 .length = size, 24 .data = { [size - 1] = 0, } 25 }; 26 27 struct flexible * get_local_flexible(void)28get_local_flexible (void) 29 { 30 return &local_flexible; 31 } 32 33 struct flexible * get_local_flexible_nonzero(void)34get_local_flexible_nonzero (void) 35 { 36 return &local_flexible_nonzero; 37 } 38 39 /* We should not place the flexibly-sized objects in small data 40 sections, or generate gp-relative addresses for them. */ 41 42 /* { dg-final { scan-assembler-not "\\.sdata" } } */ 43 /* { dg-final { scan-assembler-not "\\.sbss" } } */ 44 /* { dg-final { scan-assembler-not "%gprel\(.*flexible.*\)" } } */ 45 46 47 48 49