http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46028
--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2010-10-15 01:01:13 UTC --- Note that you can't trivially extend the laxity in /* Handle a size folded to an integer constant but not an integer constant expression. */ if (!size_int_const) { /* If this is a file scope declaration of an ordinary identifier, this is invalid code; diagnosing it here and not subsequently treating the type as variable-length avoids more confusing diagnostics later. */ if ((decl_context == NORMAL || decl_context == FIELD) && current_scope == file_scope) pedwarn (input_location, 0, "variably modified %qE at file scope", name); else this_size_varies = size_varies = true; warn_variable_length_array (name, size); } (that does a pedwarn rather than an error if this occurs at file scope) to the present case of a static array inside a function, because it's valid to have a block scope static *pointer* to VLA (which is however different from a pointer to non-VLA), so you'd need to be lax only if it's a static array rather than a pointer to such.