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
This commit is contained in:
parent
962fe3950f
commit
fe88415f1b
4 changed files with 29 additions and 10 deletions
|
@ -1,3 +1,10 @@
|
|||
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>
|
||||
|
||||
* cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK,
|
||||
|
@ -19,7 +26,7 @@
|
|||
|
||||
2004-06-28 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR C++/16174
|
||||
PR c++/16174
|
||||
* call.c (build_temp): Declare.
|
||||
(check_constructor_callable): New.
|
||||
(reference_binding): Only set CHECK_COPY_CONSTRUCTOR if not for
|
||||
|
|
|
@ -12343,11 +12343,6 @@ cp_parser_class_specifier (cp_parser* parser)
|
|||
pop_p = push_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (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 the type is erroneous, skip the entire body of the class. */
|
||||
cp_parser_skip_to_closing_brace (parser);
|
||||
|
@ -12355,9 +12350,6 @@ cp_parser_class_specifier (cp_parser* parser)
|
|||
/* Parse the member-specification. */
|
||||
cp_parser_member_specification_opt (parser);
|
||||
|
||||
if (processing_template_decl)
|
||||
pop_deferring_access_checks ();
|
||||
|
||||
/* Look for the trailing `}'. */
|
||||
cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
|
||||
/* 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)
|
|||
cp_parser_template_declaration_after_export (parser, member_p);
|
||||
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,
|
||||
member_p,
|
||||
&friend_p);
|
||||
|
||||
pop_deferring_access_checks ();
|
||||
|
||||
/* If this is a member template declaration, let the front
|
||||
end know. */
|
||||
if (member_p && !friend_p && decl)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
* gcc.dg/pr14963.c: Remove the dg-warning as it is dected
|
||||
|
@ -12,7 +17,7 @@
|
|||
|
||||
2004-06-28 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* PR C++/16174
|
||||
* PR c++/16174
|
||||
* g++.dg/template/ctor4.C: New.
|
||||
|
||||
2004-06-27 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
|
9
gcc/testsuite/g++.dg/parse/crash15.C
Normal file
9
gcc/testsuite/g++.dg/parse/crash15.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// { 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; }
|
Loading…
Add table
Reference in a new issue