diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2005-06-08 11:09:13 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2005-06-08 11:09:13 +0000 |
commit | cb6d4a9fce89e5bea9476338870125bac9b83e96 (patch) | |
tree | d807bfd40a0af5e5e71210780fe36ea13da24aee /gcc/cp | |
parent | 21956c07ad851e6fa1b3892cb87b495c11efc2ba (diff) | |
download | gcc-cb6d4a9fce89e5bea9476338870125bac9b83e96.zip gcc-cb6d4a9fce89e5bea9476338870125bac9b83e96.tar.gz gcc-cb6d4a9fce89e5bea9476338870125bac9b83e96.tar.bz2 |
re PR c++/19894 (pointer-to-void member not rejected in template)
PR c++/19894
* pt.c (tsubst): Reject pointer-to-member of type void.
* g++.dg/template/ptrmem15.C: New test.
PR c++/20563
* parser.c (cp_parser_label_declaration): Deal with invalid/missing
identifiers.
* g++.dg/ext/label4.C: New test.
From-SVN: r100754
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/parser.c | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 7 |
3 files changed, 19 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 87a9da7..c15f9b4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2005-06-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR c++/19894 + * pt.c (tsubst): Reject pointer-to-member of type void. + + PR c++/20563 + * parser.c (cp_parser_label_declaration): Deal with invalid/missing + identifiers. + 2005-06-07 Nathan Sidwell <nathan@codesourcery.com> * cp-tree.def (DEFAULT_ARG): Adjust documentation. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 24cb027..cb389d2 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -14392,7 +14392,10 @@ cp_parser_label_declaration (cp_parser* parser) /* Look for an identifier. */ identifier = cp_parser_identifier (parser); - /* Declare it as a lobel. */ + /* If we failed, stop. */ + if (identifier == error_mark_node) + break; + /* Declare it as a label. */ finish_label_decl (identifier); /* If the next token is a `;', stop. */ if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f7eb935..292dc0a 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -7271,7 +7271,12 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl) { if (complain & tf_error) error ("creating pointer to member reference type %qT", type); - + return error_mark_node; + } + if (TREE_CODE (type) == VOID_TYPE) + { + if (complain & tf_error) + error ("creating pointer to member of type void"); return error_mark_node; } gcc_assert (TREE_CODE (type) != METHOD_TYPE); |