* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100754
138bc75d-0d04-0410-961f-
82ee72b054a4
+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.
/* 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))
{
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);
+2005-06-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/19894
+ * g++.dg/template/ptrmem15.C: New test.
+
+ PR c++/20563
+ * g++.dg/ext/label4.C: New test.
+
2005-06-08 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/tls/debug-1.c: New test.
--- /dev/null
+// PR c++/20563: ICE (--enable-checking), infinite loop (--disable-checking)
+// Origin: Giovanni Bajo <giovannibajo@libero.it>
+
+// { dg-do compile }
+
+__label__ *l; // { dg-error "before" }
--- /dev/null
+// PR c++/19894
+// Origin: Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+template<typename T> struct A
+{
+ T A::* p; // { dg-error "void" }
+};
+
+A<void> a; // { dg-error "instantiated" }