[C patch] Fix non-regression part of PR29092

Joseph S. Myers joseph@codesourcery.com
Wed Sep 27 12:20:00 GMT 2006


On Tue, 26 Sep 2006, Paolo Bonzini wrote:

> The PR is about a failure of the C front-end to accept
> 
> __attribute__ ((vector_size (8))) int x =
>   (__attribute__ ((vector_size (8))) int) {1, 2};
> 
> The similar code
> 
>  typedef __attribute__ ((vector_size (8))) int vec_int;
>  vec_int x =  (vec_int) {1, 2};
> 
> never compiled for --std=gnu99.  The problem is that initializing objects with
> static storage duration with compound literals, was allowed by gnu89 and not
> gnu99.  This patch enables the extension at gnu99 too.

Not having this extension at gnu99 was a deliberate decision, in 
recognition of how C99's compound literals differ from the old GNU 
"constructor expressions" extension; that is, the compound literal is a 
temporary object and you wouldn't allow such initialization with a named 
object instead of a compound literal as initializer.

However, this decision was for structure and union types and different 
considerations may apply for vector types which aren't in the standard at 
all.

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Gcc-patches mailing list