On Wed, 3 Sep 2014, Florian Weimer wrote:

> > If you declare the size as [static sz] then
> > that means it points to an array of at least that size, but it could be
> > larger.
> 
> GCC does not seem to enforce that.  This compiles without errors:

[static] is about optimization (but GCC doesn't optimize using it either).  
It's only undefined behavior if a call with a too-small array is actually 
executed.

> int foo(char [static 5]);
> 
> int
> bar(char *p)
> {
>   return foo(p);
> }

That's perfectly valid, as long as every call to bar is with an argument 
that does in fact point to at least 5 chars (if a call doesn't, there's 
undefined behavior when that call is executed).

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to