From: Nathan Sidwell Date: Tue, 29 Jun 2004 11:10:11 +0000 (+0000) Subject: re PR c++/16260 (ICE in template function) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fe88415f1b385b2dfc11f54422ff414f643df9e0;p=gcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ad782f26c60..532180d82c2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2004-06-29 Nathan Sidwell + + 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 * cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK, @@ -19,7 +26,7 @@ 2004-06-28 Nathan Sidwell - 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 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 10238c4a2f1..ca2b0a995d2 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bff0e80e7ce..3fe71ecf5db 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-06-29 Nathan Sidwell + + PR c++/16260 + * g++.dg/parse/crash15.C: New. + 2004-06-28 Andrew Pinski * gcc.dg/pr14963.c: Remove the dg-warning as it is dected @@ -12,7 +17,7 @@ 2004-06-28 Nathan Sidwell - * PR C++/16174 + * PR c++/16174 * g++.dg/template/ctor4.C: New. 2004-06-27 Andrew Pinski diff --git a/gcc/testsuite/g++.dg/parse/crash15.C b/gcc/testsuite/g++.dg/parse/crash15.C new file mode 100644 index 00000000000..afad4c1fe59 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash15.C @@ -0,0 +1,9 @@ +// { dg-do compile } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 29 Jun 2004 + +// Origin: Volker Reichelt +// Bug 16260. ICE + +template int foo() { return T::X::Y; }