diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2002-02-11 10:52:20 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2002-02-11 10:52:20 -0500 |
commit | e6b9638bffefdbb60bf261626d2335848de301c4 (patch) | |
tree | b634d429e088a0ccefa6b3c7358a84f2106abf2e /gcc | |
parent | d6b2c474747305341ffe3f4c6fdc4f1fee4a47d1 (diff) | |
download | gcc-e6b9638bffefdbb60bf261626d2335848de301c4.zip gcc-e6b9638bffefdbb60bf261626d2335848de301c4.tar.gz gcc-e6b9638bffefdbb60bf261626d2335848de301c4.tar.bz2 |
parse.y (reserved_declspecs): Don't handle attributes.
* parse.y (reserved_declspecs): Don't handle attributes.
(reserved_typespecquals): Handle them here.
* Make-lang.in (parse.c): Adjust expected conflicts.
From-SVN: r49678
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/Make-lang.in | 2 | ||||
-rw-r--r-- | gcc/cp/parse.y | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib4.C | 31 |
4 files changed, 44 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 25bf9d9..f6c2a54 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-02-11 Jason Merrill <jason@redhat.com> + + * parse.y (reserved_declspecs): Don't handle attributes. + (reserved_typespecquals): Handle them here. + * Make-lang.in (parse.c): Adjust expected conflicts. + 2002-02-08 Jakub Jelinek <jakub@redhat.com> * parse.y (primary, primary_no_id): Use compstmt_or_stmtexpr @@ -1603,8 +1609,8 @@ Fri Sep 21 08:16:19 2001 J"orn Rennecke <amylaar@redhat.com> 2001-09-15 Gabriel Dos Reis <gdr@merlin.codesourcery.com> - * Make-lang.in (cp/error.o): Depend on real.h - * error.c: #include "real.h" + * Make-lang.in (cp/error.o): Depend on real.h + * error.c: #include "real.h" 2001-09-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 976559a..f8d023a 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -120,7 +120,7 @@ $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf $(srcdir)/cp/parse.h: $(srcdir)/cp/parse.c $(srcdir)/cp/parse.c: $(srcdir)/cp/parse.y - @echo "Expect 31 shift/reduce conflicts and 58 reduce/reduce conflicts." + @echo "Expect 33 shift/reduce conflicts and 58 reduce/reduce conflicts." cd $(srcdir)/cp && \ if $(BISON) $(BISONFLAGS) -d -o p$$$$.c parse.y; then \ grep '^#define[ ]*YYEMPTY' p$$$$.c >> p$$$$.h ; \ diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 7faeaba..54a6823 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -1895,10 +1895,6 @@ reserved_declspecs: warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); $$ = tree_cons (NULL_TREE, $2, $$); } - | reserved_declspecs attributes - { $$ = tree_cons ($2, NULL_TREE, $1); } - | attributes - { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); } ; /* List of just storage classes and type modifiers. @@ -1966,6 +1962,10 @@ reserved_typespecquals: { $$ = build_tree_list (NULL_TREE, $1.t); } | reserved_typespecquals typespecqual_reserved { $$ = tree_cons (NULL_TREE, $2.t, $1); } + | reserved_typespecquals attributes + { $$ = tree_cons ($2, NULL_TREE, $1); } + | attributes %prec EMPTY + { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); } ; /* A typespec (but not a type qualifier). diff --git a/gcc/testsuite/g++.dg/ext/attrib4.C b/gcc/testsuite/g++.dg/ext/attrib4.C new file mode 100644 index 0000000..68cc741 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib4.C @@ -0,0 +1,31 @@ +// Test for syntax support of various attribute permutations. + +int +__attribute__((noreturn)) +__attribute__((unused)) +one(void); // OK + +__attribute__((noreturn)) +__attribute__((unused)) +int +two(void); // OK + +int +__attribute__((unused)) +three (void) +__attribute__((noreturn)); // OK + +__attribute__((unused)) +int +four (void) +__attribute__((noreturn)); // OK + +int +five(void) +__attribute__((noreturn)) +__attribute__((unused)); // OK + +__attribute__((noreturn)) +int +__attribute__((unused)) // parse error before '__attribute__' in C++ +six (void); // OK in C |