diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-24 07:37:56 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-24 07:37:56 -0500 |
commit | ba09c753fb601de49a8c9d9f51de5bad63218e22 (patch) | |
tree | 21205484087dfb838fbefa0891d68f76be98ea6f /gcc | |
parent | fe873240671995cde2757988dd17b3431d908ede (diff) | |
download | gcc-ba09c753fb601de49a8c9d9f51de5bad63218e22.zip gcc-ba09c753fb601de49a8c9d9f51de5bad63218e22.tar.gz gcc-ba09c753fb601de49a8c9d9f51de5bad63218e22.tar.bz2 |
(attrib): Allow expressions instead of constants.
From-SVN: r6299
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-parse.in | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/c-parse.in b/gcc/c-parse.in index 06fd36f..f987441 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -1,5 +1,5 @@ /* 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. @@ -1072,8 +1072,13 @@ attrib $$ = $1; } | TYPE_QUAL | IDENTIFIER '(' IDENTIFIER ')' - { /* If not "mode (m)", then issue warning. */ - if (strcmp (IDENTIFIER_POINTER ($1), "mode") != 0) + { /* If not "mode (m)" or "aligned", then issue warning. + 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", IDENTIFIER_POINTER ($1)); @@ -1081,10 +1086,9 @@ attrib } else $$ = tree_cons ($1, $3, NULL_TREE); } - | IDENTIFIER '(' CONSTANT ')' + | IDENTIFIER '(' expr_no_commas ')' { /* if not "aligned(n)", then issue warning */ - if (strcmp (IDENTIFIER_POINTER ($1), "aligned") != 0 - || TREE_CODE ($3) != INTEGER_CST) + if (strcmp (IDENTIFIER_POINTER ($1), "aligned") != 0) { warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER ($1)); @@ -1092,11 +1096,9 @@ attrib } else $$ = 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 (strcmp (IDENTIFIER_POINTER ($1), "format") != 0 - || TREE_CODE ($5) != INTEGER_CST - || TREE_CODE ($7) != INTEGER_CST) + if (strcmp (IDENTIFIER_POINTER ($1), "format") != 0) { warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER ($1)); |