aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2005-06-08 11:09:13 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2005-06-08 11:09:13 +0000
commitcb6d4a9fce89e5bea9476338870125bac9b83e96 (patch)
treed807bfd40a0af5e5e71210780fe36ea13da24aee /gcc/cp
parent21956c07ad851e6fa1b3892cb87b495c11efc2ba (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/cp/parser.c5
-rw-r--r--gcc/cp/pt.c7
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);