Commit fe88415f by Nathan Sidwell Committed by Nathan Sidwell

re PR c++/16260 (ICE in template function)

cp:
        PR c++/16260
        * parser.c (cp_parser_template_declaration_after_export): Disable
        access checks here ...
        (cp_parser_class_specifier): ... not here.
testsuite:
        PR c++/16260
        * g++.dg/parse/crash15.C: New.

From-SVN: r83851
parent 962fe395
2004-06-29 Nathan Sidwell <nathan@codesourcery.com>
PR c++/16260
* parser.c (cp_parser_template_declaration_after_export): Disable
access checks here ...
(cp_parser_class_specifier): ... not here.
2004-06-28 Nathan Sidwell <nathan@codesourcery.com> 2004-06-28 Nathan Sidwell <nathan@codesourcery.com>
* cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK, * cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK,
...@@ -19,7 +26,7 @@ ...@@ -19,7 +26,7 @@
2004-06-28 Nathan Sidwell <nathan@codesourcery.com> 2004-06-28 Nathan Sidwell <nathan@codesourcery.com>
PR C++/16174 PR c++/16174
* call.c (build_temp): Declare. * call.c (build_temp): Declare.
(check_constructor_callable): New. (check_constructor_callable): New.
(reference_binding): Only set CHECK_COPY_CONSTRUCTOR if not for (reference_binding): Only set CHECK_COPY_CONSTRUCTOR if not for
......
...@@ -12343,11 +12343,6 @@ cp_parser_class_specifier (cp_parser* parser) ...@@ -12343,11 +12343,6 @@ cp_parser_class_specifier (cp_parser* parser)
pop_p = push_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (type))); pop_p = push_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (type)));
type = begin_class_definition (type); type = begin_class_definition (type);
if (processing_template_decl)
/* There are no access checks when parsing a template, as we do no
know if a specialization will be a friend. */
push_deferring_access_checks (dk_no_check);
if (type == error_mark_node) if (type == error_mark_node)
/* If the type is erroneous, skip the entire body of the class. */ /* If the type is erroneous, skip the entire body of the class. */
cp_parser_skip_to_closing_brace (parser); cp_parser_skip_to_closing_brace (parser);
...@@ -12355,9 +12350,6 @@ cp_parser_class_specifier (cp_parser* parser) ...@@ -12355,9 +12350,6 @@ cp_parser_class_specifier (cp_parser* parser)
/* Parse the member-specification. */ /* Parse the member-specification. */
cp_parser_member_specification_opt (parser); cp_parser_member_specification_opt (parser);
if (processing_template_decl)
pop_deferring_access_checks ();
/* Look for the trailing `}'. */ /* Look for the trailing `}'. */
cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
/* We get better error messages by noticing a common problem: a /* We get better error messages by noticing a common problem: a
...@@ -14879,10 +14871,16 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) ...@@ -14879,10 +14871,16 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
cp_parser_template_declaration_after_export (parser, member_p); cp_parser_template_declaration_after_export (parser, member_p);
else else
{ {
/* There are no access checks when parsing a template, as we do not
know if a specialization will be a friend. */
push_deferring_access_checks (dk_no_check);
decl = cp_parser_single_declaration (parser, decl = cp_parser_single_declaration (parser,
member_p, member_p,
&friend_p); &friend_p);
pop_deferring_access_checks ();
/* If this is a member template declaration, let the front /* If this is a member template declaration, let the front
end know. */ end know. */
if (member_p && !friend_p && decl) if (member_p && !friend_p && decl)
......
2004-06-29 Nathan Sidwell <nathan@codesourcery.com>
PR c++/16260
* g++.dg/parse/crash15.C: New.
2004-06-28 Andrew Pinski <apinski@apple.com> 2004-06-28 Andrew Pinski <apinski@apple.com>
* gcc.dg/pr14963.c: Remove the dg-warning as it is dected * gcc.dg/pr14963.c: Remove the dg-warning as it is dected
...@@ -12,7 +17,7 @@ ...@@ -12,7 +17,7 @@
2004-06-28 Nathan Sidwell <nathan@codesourcery.com> 2004-06-28 Nathan Sidwell <nathan@codesourcery.com>
* PR C++/16174 * PR c++/16174
* g++.dg/template/ctor4.C: New. * g++.dg/template/ctor4.C: New.
2004-06-27 Andrew Pinski <pinskia@physics.uc.edu> 2004-06-27 Andrew Pinski <pinskia@physics.uc.edu>
......
// { dg-do compile }
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 29 Jun 2004 <nathan@codesourcery.com>
// Origin: Volker Reichelt <reichelt@gcc.gnu.org>
// Bug 16260. ICE
template<typename T> int foo() { return T::X::Y; }
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