Commit ba09c753 by Richard Kenner

(attrib): Allow expressions instead of constants.

From-SVN: r6299
parent fe873240
/* YACC parser for C syntax and for Objective C. -*-c-*- /* YACC parser for C syntax and for Objective C. -*-c-*-
Copyright (C) 1987, 1988, 1989, 1992 Free Software Foundation, Inc. Copyright (C) 1987, 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
This file is part of GNU CC. This file is part of GNU CC.
...@@ -1072,8 +1072,13 @@ attrib ...@@ -1072,8 +1072,13 @@ attrib
$$ = $1; } $$ = $1; }
| TYPE_QUAL | TYPE_QUAL
| IDENTIFIER '(' IDENTIFIER ')' | IDENTIFIER '(' IDENTIFIER ')'
{ /* If not "mode (m)", then issue warning. */ { /* If not "mode (m)" or "aligned", then issue warning.
if (strcmp (IDENTIFIER_POINTER ($1), "mode") != 0) If "aligned", this will later produce an error in decl_attributes
since an identifier is not a valid constant, but we want to give
an error instead of a warning when the attribute name is
recognized but has an improper argument. */
if (strcmp (IDENTIFIER_POINTER ($1), "mode") != 0
&& strcmp (IDENTIFIER_POINTER ($1), "aligned") != 0)
{ {
warning ("`%s' attribute directive ignored", warning ("`%s' attribute directive ignored",
IDENTIFIER_POINTER ($1)); IDENTIFIER_POINTER ($1));
...@@ -1081,10 +1086,9 @@ attrib ...@@ -1081,10 +1086,9 @@ attrib
} }
else else
$$ = tree_cons ($1, $3, NULL_TREE); } $$ = tree_cons ($1, $3, NULL_TREE); }
| IDENTIFIER '(' CONSTANT ')' | IDENTIFIER '(' expr_no_commas ')'
{ /* if not "aligned(n)", then issue warning */ { /* if not "aligned(n)", then issue warning */
if (strcmp (IDENTIFIER_POINTER ($1), "aligned") != 0 if (strcmp (IDENTIFIER_POINTER ($1), "aligned") != 0)
|| TREE_CODE ($3) != INTEGER_CST)
{ {
warning ("`%s' attribute directive ignored", warning ("`%s' attribute directive ignored",
IDENTIFIER_POINTER ($1)); IDENTIFIER_POINTER ($1));
...@@ -1092,11 +1096,9 @@ attrib ...@@ -1092,11 +1096,9 @@ attrib
} }
else else
$$ = tree_cons ($1, $3, NULL_TREE); } $$ = tree_cons ($1, $3, NULL_TREE); }
| IDENTIFIER '(' IDENTIFIER ',' CONSTANT ',' CONSTANT ')' | IDENTIFIER '(' IDENTIFIER ',' expr_no_commas ',' expr_no_commas ')'
{ /* if not "format(...)", then issue warning */ { /* if not "format(...)", then issue warning */
if (strcmp (IDENTIFIER_POINTER ($1), "format") != 0 if (strcmp (IDENTIFIER_POINTER ($1), "format") != 0)
|| TREE_CODE ($5) != INTEGER_CST
|| TREE_CODE ($7) != INTEGER_CST)
{ {
warning ("`%s' attribute directive ignored", warning ("`%s' attribute directive ignored",
IDENTIFIER_POINTER ($1)); IDENTIFIER_POINTER ($1));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment