On Mon, Feb 01, 2016 at 03:45:27AM +0100, Nicolai Stange wrote: > Toplevel compound literals have got static storage duration > [6.5.2.5(6)]. > > This implies that > 1. their addresses are address constants [6.6(9)] and > 2. their initializers must contain constant expressions only > [6.5.2.5(3), 6.7.8(4)] . > > Flag the anonymous symbol created at expression parsing time as having > static storage duration if the compound literal occurs at top level > scope. > > Flag the whole expression as being an address constant at evaluation > time if its corresponding anonymous symbol had been previously marked > as having static storage duration. > ... > diff --git a/validation/constexpr-compound-literal.c b/validation/constexpr-compound-literal.c > --- /dev/null > +++ b/validation/constexpr-compound-literal.c > @@ -0,0 +1,19 @@ > +static int *a = &(int){ 1 }; // OK > +static int *b = &(int){ *a }; // KO > + > +static void foo(void) > +{ > + int *b = &(int){ 1 }; // OK > + int *c = &(int){ *a }; // OK > + static int *d = &(int){ 1 }; // KO Humm ... why is this last one different than the corresponding top level one @ line 1? -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html