re PR c++/26558 (segfault on syntax error)
PR c++/26558 * parser.c (cp_parser_class_name): Check for invalid typenames. Rearrange code. * g++.dg/parse/template19.C: New test. From-SVN: r113096
This commit is contained in:
parent
51e8f10cf6
commit
94d285a53c
|
@ -1,5 +1,9 @@
|
||||||
2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||||
|
|
||||||
|
PR c++/26558
|
||||||
|
* parser.c (cp_parser_class_name): Check for invalid typenames.
|
||||||
|
Rearrange code.
|
||||||
|
|
||||||
PR c++/26739
|
PR c++/26739
|
||||||
* pt.c (tsubst_friend_function): Return early if
|
* pt.c (tsubst_friend_function): Return early if
|
||||||
pushdecl_namespace_level fails.
|
pushdecl_namespace_level fails.
|
||||||
|
|
|
@ -12830,15 +12830,18 @@ cp_parser_class_name (cp_parser *parser,
|
||||||
standard does not seem to be definitive, but there is no other
|
standard does not seem to be definitive, but there is no other
|
||||||
valid interpretation of the following `::'. Therefore, those
|
valid interpretation of the following `::'. Therefore, those
|
||||||
names are considered class-names. */
|
names are considered class-names. */
|
||||||
decl = TYPE_NAME (make_typename_type (scope, decl, tag_type, tf_error));
|
{
|
||||||
else if (decl == error_mark_node
|
decl = make_typename_type (scope, decl, tag_type, tf_error);
|
||||||
|| TREE_CODE (decl) != TYPE_DECL
|
if (decl != error_mark_node)
|
||||||
|
decl = TYPE_NAME (decl);
|
||||||
|
}
|
||||||
|
else if (TREE_CODE (decl) != TYPE_DECL
|
||||||
|| TREE_TYPE (decl) == error_mark_node
|
|| TREE_TYPE (decl) == error_mark_node
|
||||||
|| !IS_AGGR_TYPE (TREE_TYPE (decl)))
|
|| !IS_AGGR_TYPE (TREE_TYPE (decl)))
|
||||||
{
|
decl = error_mark_node;
|
||||||
|
|
||||||
|
if (decl == error_mark_node)
|
||||||
cp_parser_error (parser, "expected class-name");
|
cp_parser_error (parser, "expected class-name");
|
||||||
return error_mark_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
return decl;
|
return decl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||||
|
|
||||||
|
PR c++/26558
|
||||||
|
* g++.dg/parse/template19.C: New test.
|
||||||
|
|
||||||
PR c++/26739
|
PR c++/26739
|
||||||
* g++.old-deja/g++.pt/friend36.C: Adjust error markers.
|
* g++.old-deja/g++.pt/friend36.C: Adjust error markers.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// PR c++/26558
|
||||||
|
// Origin: Jan Gorski <slimak@yk74.internetdsl.tpnet.pl>
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
template<int> struct A
|
||||||
|
{
|
||||||
|
template<int> void foo()
|
||||||
|
{
|
||||||
|
foo<0>::; // { dg-error "before" }
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue