Commit abab4604 by Jason Merrill

re PR c++/28559 (ICE with friend and __attribute__)

        PR c++/28559
        * parser.c (cp_parser_elaborated_type_specifier): Also ignore
        attributes applied to a TYPENAME_TYPE.

From-SVN: r116137
parent 96ff6c8c
2006-08-11 Jason Merrill <jason@redhat.com>
PR c++/28559
* parser.c (cp_parser_elaborated_type_specifier): Also ignore
attributes applied to a TYPENAME_TYPE.
2006-08-09 Lee Millward <lee.millward@codesourcery.com> 2006-08-09 Lee Millward <lee.millward@codesourcery.com>
PR c++/28637 PR c++/28637
* pt.c (coerce_template_parms): Copy across the * pt.c (coerce_template_parms): Copy across the
invalid template arguments to the new template inner arguments. invalid template arguments to the new template inner arguments.
(retrieve_specialization): Robustify. (retrieve_specialization): Robustify.
PR c++/28638 PR c++/28638
* pt.c (coerce_template_template_parms): Robustify. * pt.c (coerce_template_template_parms): Robustify.
PR c++/28639 PR c++/28639
* error.c (dump_template_parms): Robustify. * error.c (dump_template_parms): Robustify.
PR c++/28640 PR c++/28640
* pt.c (redeclare_class_template): Robustify. * pt.c (redeclare_class_template): Robustify.
PR c++/28641 PR c++/28641
* pt.c (type_unification_real): Robustify. * pt.c (type_unification_real): Robustify.
2006-08-03 Lee Millward <lee.millward@codesourcery.com> 2006-08-03 Lee Millward <lee.millward@codesourcery.com>
PR c++/28347 PR c++/28347
* decl.c (start_decl): Return error_mark_node if a * decl.c (start_decl): Return error_mark_node if a
diagnostic was issed for an invalid typedef initialization. diagnostic was issed for an invalid typedef initialization.
2006-08-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de> 2006-08-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
......
...@@ -10268,8 +10268,11 @@ cp_parser_elaborated_type_specifier (cp_parser* parser, ...@@ -10268,8 +10268,11 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
/* Allow attributes on forward declarations of classes. */ /* Allow attributes on forward declarations of classes. */
if (attributes) if (attributes)
{ {
if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type) if (TREE_CODE (type) == TYPENAME_TYPE)
&& ! processing_explicit_instantiation) warning (OPT_Wattributes,
"attributes ignored on uninstantiated type");
else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
&& ! processing_explicit_instantiation)
warning (OPT_Wattributes, warning (OPT_Wattributes,
"attributes ignored on template instantiation"); "attributes ignored on template instantiation");
else if (is_declaration && cp_parser_declares_only_class_p (parser)) else if (is_declaration && cp_parser_declares_only_class_p (parser))
......
// PR c++/28559
template<typename T> struct A
{
struct B;
};
struct C
{
template<typename T> friend struct __attribute__((packed)) A<T>::B; // { dg-warning "uninstantiated" }
};
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