gcc42: Fix minor C99 parse bug

DR #289[0] came down and gcc4.2.1 was on the wrong side of history.
Partially revert GCC r42574 (just remove the error) to rectify the parse
bug to match Clang and other compliant C99 compilers.

An example declaration gcc tripped on before this fix:

  void foobar(int [static 1]);

An example declaration gcc did not trip on before this fix:

  void foobar(int name[static 1]);

Bump __FreeBSD_cc_version.

[0]: http://www.open-std.org/JTC1/SC22/WG14/www/docs/dr_289.htm

Reported by:	allanjude
Sponsored by:	EMC / Isilon Storage Division
This commit is contained in:
Conrad Meyer 2016-05-27 03:40:52 +00:00
parent b38b13d889
commit 2844d30cc5
2 changed files with 4 additions and 10 deletions

View File

@ -3150,20 +3150,14 @@ build_array_declarator (tree expr, struct c_declspecs *quals, bool static_p,
/* Set the contained declarator of an array declarator. DECL is the
declarator, as constructed by build_array_declarator; INNER is what
appears on the left of the []. ABSTRACT_P is true if it is an
abstract declarator, false otherwise; this is used to reject static
and type qualifiers in abstract declarators, where they are not in
the C99 grammar (subject to possible change in DR#289). */
appears on the left of the []. */
struct c_declarator *
set_array_declarator_inner (struct c_declarator *decl,
struct c_declarator *inner, bool abstract_p)
struct c_declarator *inner,
bool abstract_p __attribute__ ((__unused__)))
{
decl->declarator = inner;
if (abstract_p && (decl->u.array.quals != TYPE_UNQUALIFIED
|| decl->u.array.attrs != NULL_TREE
|| decl->u.array.static_p))
error ("static or type qualifiers in abstract declarator");
return decl;
}

View File

@ -8,7 +8,7 @@
/* Fake out gcc/config/freebsd<version>.h. */
#define FBSD_MAJOR 11
#define FBSD_CC_VER 1100001 /* form like __FreeBSD_version */
#define FBSD_CC_VER 1100002 /* form like __FreeBSD_version */
#undef SYSTEM_INCLUDE_DIR /* We don't need one for now. */
#undef TOOL_INCLUDE_DIR /* We don't need one for now. */