| /* PR c/5597 */ |
| /* { dg-do compile } */ |
| /* { dg-options "" } */ |
| |
| /* Verify that GCC forbids non-static initialization of |
| flexible array members. */ |
| |
| struct str { int len; char s[]; }; |
| |
| struct str a = { 2, "a" }; |
| |
| void foo() |
| { |
| static struct str b = { 2, "b" }; |
| struct str c = { 2, "c" }; /* { dg-error "(non-static)|(near initialization)" } */ |
| struct str d = (struct str) { 2, "d" }; /* { dg-error "(non-static)|(near initialization)" } */ |
| struct str e = (struct str) { d.len, "e" }; /* { dg-error "(non-static)|(initialization)" } */ |
| } |
| |
| struct str f = { 0, {} }; |
| |
| void bar() |
| { |
| static struct str g = { 0, {} }; |
| struct str h = { 0, {} }; /* { dg-error "(non-static)|(near initialization)" } */ |
| struct str i = (struct str) { 0, {} }; /* { dg-error "(non-static)|(near initialization)" } */ |
| struct str j = (struct str) { i.len, {} }; /* { dg-error "(non-static)|(initialization)" } */ |
| } |
| |
| struct str k = { 0 }; |
| |
| void baz() |
| { |
| static struct str l = { 0 }; |
| struct str m = { 0 }; |
| struct str n = (struct str) { 0 }; |
| struct str o = (struct str) { n.len }; |
| } |
| |
| struct str p = {}; |
| |
| void qux() |
| { |
| static struct str q = {}; |
| struct str r = {}; |
| struct str s = (struct str) {}; |
| } |