Commit e6b9638b by Jason Merrill

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
parent d6b2c474
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> 2002-02-08 Jakub Jelinek <jakub@redhat.com>
* parse.y (primary, primary_no_id): Use compstmt_or_stmtexpr * 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> ...@@ -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> 2001-09-15 Gabriel Dos Reis <gdr@merlin.codesourcery.com>
* Make-lang.in (cp/error.o): Depend on real.h * Make-lang.in (cp/error.o): Depend on real.h
* error.c: #include "real.h" * error.c: #include "real.h"
2001-09-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2001-09-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
......
...@@ -120,7 +120,7 @@ $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf ...@@ -120,7 +120,7 @@ $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf
$(srcdir)/cp/parse.h: $(srcdir)/cp/parse.c $(srcdir)/cp/parse.h: $(srcdir)/cp/parse.c
$(srcdir)/cp/parse.c: $(srcdir)/cp/parse.y $(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 && \ cd $(srcdir)/cp && \
if $(BISON) $(BISONFLAGS) -d -o p$$$$.c parse.y; then \ if $(BISON) $(BISONFLAGS) -d -o p$$$$.c parse.y; then \
grep '^#define[ ]*YYEMPTY' p$$$$.c >> p$$$$.h ; \ grep '^#define[ ]*YYEMPTY' p$$$$.c >> p$$$$.h ; \
......
...@@ -1895,10 +1895,6 @@ reserved_declspecs: ...@@ -1895,10 +1895,6 @@ reserved_declspecs:
warning ("`%s' is not at beginning of declaration", warning ("`%s' is not at beginning of declaration",
IDENTIFIER_POINTER ($2)); IDENTIFIER_POINTER ($2));
$$ = tree_cons (NULL_TREE, $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. /* List of just storage classes and type modifiers.
...@@ -1966,6 +1962,10 @@ reserved_typespecquals: ...@@ -1966,6 +1962,10 @@ reserved_typespecquals:
{ $$ = build_tree_list (NULL_TREE, $1.t); } { $$ = build_tree_list (NULL_TREE, $1.t); }
| reserved_typespecquals typespecqual_reserved | reserved_typespecquals typespecqual_reserved
{ $$ = tree_cons (NULL_TREE, $2.t, $1); } { $$ = 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). /* A typespec (but not a type qualifier).
......
// 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
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