Bug 20789 - [4.0 regression] ICE with incomplete type in template
Summary: [4.0 regression] ICE with incomplete type in template
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.4.0
: P2 minor
Target Milestone: 4.0.2
Assignee: Nathan Sidwell
URL:
Keywords: error-recovery, ice-on-invalid-code, monitored
: 20668 21670 22137 22181 (view as bug list)
Depends on: 17323
Blocks:
  Show dependency treegraph
 
Reported: 2005-04-06 12:36 UTC by Ivan Godard
Modified: 2005-07-12 11:29 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-06-13 12:43:02


Attachments
compiler output (1.01 KB, text/plain)
2005-04-06 12:37 UTC, Ivan Godard
Details
source code (compressed) (146.45 KB, application/x-gzip)
2005-04-06 12:37 UTC, Ivan Godard
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan Godard 2005-04-06 12:36:27 UTC
 
Comment 1 Ivan Godard 2005-04-06 12:37:05 UTC
Created attachment 8548 [details]
compiler output
Comment 2 Ivan Godard 2005-04-06 12:37:36 UTC
Created attachment 8549 [details]
source code (compressed)
Comment 3 Andrew Pinski 2005-04-06 15:53:05 UTC
This is related to PR 17323.
Comment 4 Volker Reichelt 2005-04-11 20:14:27 UTC
Confirmed, happens since gcc 3.4.0.

Reduced testcase:

======================================
template<typename> struct A;

template<int> struct B {};

template<typename T> struct C
{
    static const int i = A<T>::i;
    static const int j = i;
    B<j> b;
};

C<int> c;
======================================

Error message:

PR20789.cc: In instantiation of 'C<int>':
PR20789.cc:12:   instantiated from here
PR20789.cc:7: error: incomplete type 'A<int>' used in nested name specifier
g++: Internal error: Segmentation fault (program cc1plus)
Please submit a full bug report. [etc.]
Comment 5 Volker Reichelt 2005-04-11 20:24:20 UTC
Looks very similar to PR 20668.
Comment 6 Volker Reichelt 2005-05-24 14:20:34 UTC
*** Bug 21670 has been marked as a duplicate of this bug. ***
Comment 7 GCC Commits 2005-06-13 15:58:22 UTC
Subject: Bug 20789

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	nathan@gcc.gnu.org	2005-06-13 15:58:10

Modified files:
	gcc/cp         : ChangeLog decl.c parser.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/init: member1.C 
	gcc/testsuite/g++.dg/parse: crash26.C 

Log message:
	cp:
	PR c++/20789
	* decl.c (cp_finish_decl): Clear runtime runtime initialization if
	in-class decl's initializer is bad.
	
	PR c++/21929
	* parser.c (struct cp_parser): Document that scope could be
	error_mark.
	(cp_parser_diagnose_invalid_type_name): Cope with error_mark for
	scope.
	(cp_parser_nested_name_specifier): Return NULL_TREE on error.
	(cp_parser_postfix_expression): Deal with null or error_mark
	scope.
	(cp_parser_elaborated_type_specifier): Adjust
	cp_parser_nested_name_specifier call.
	
	* parser (cp_parser_skip_to_end_of_block_or_statement): Cleanup.
	testsuite:
	PR c++/21929
	* g++.dg/parse/crash26.C: New.
	
	PR c++/20789
	* g++.dg/init/member1.C: New.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4785&r2=1.4786
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&r1=1.1403&r2=1.1404
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&r1=1.340&r2=1.341
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.5631&r2=1.5632
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/member1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/crash26.C.diff?cvsroot=gcc&r1=NONE&r2=1.1

Comment 8 Nathan Sidwell 2005-06-13 16:36:39 UTC
fixed mainline and 3.4
2005-06-13  Nathan Sidwell  <nathan@codesourcery.com>

	PR c++/20789
	* decl.c (cp_finish_decl): Clear runtime runtime initialization if
	in-class decl's initializer is bad.
Comment 9 GCC Commits 2005-06-13 17:20:36 UTC
Subject: Bug 20789

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_4-branch
Changes by:	nathan@gcc.gnu.org	2005-06-13 17:20:31

Modified files:
	gcc/cp         : decl.c ChangeLog 
	gcc/testsuite/g++.dg/other: warning1.C 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/init: member1.C 

Log message:
	cp:
	PR c++/20789
	* decl.c (cp_finish_decl): Clear runtime runtime initialization if
	in-class decl's initializer is bad.
	testsuite:
	PR c++/20789
	* g++.dg/init/member1.C: New.
	* g++.dg/other/warning1.C: Adjust.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.1174.2.35&r2=1.1174.2.36
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3892.2.225&r2=1.3892.2.226
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/member1.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/other/warning1.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.1&r2=1.1.48.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3389.2.404&r2=1.3389.2.405

Comment 10 Volker Reichelt 2005-06-14 08:24:32 UTC
*** Bug 20668 has been marked as a duplicate of this bug. ***
Comment 11 Andrew Pinski 2005-06-21 16:56:18 UTC
*** Bug 22137 has been marked as a duplicate of this bug. ***
Comment 12 Andrew Pinski 2005-06-25 02:07:57 UTC
*** Bug 22181 has been marked as a duplicate of this bug. ***
Comment 13 Volker Reichelt 2005-07-12 10:48:34 UTC
Nathan, would you mind applying the patch to the 4.0 branch,
since the branch is now open again? Thanks!
Comment 14 Nathan Sidwell 2005-07-12 11:07:50 UTC
Subject: Re:  [4.0 regression] ICE with incomplete type in
 template

reichelt at gcc dot gnu dot org wrote:
> ------- Additional Comments From reichelt at gcc dot gnu dot org  2005-07-12 10:48 -------
> Nathan, would you mind applying the patch to the 4.0 branch,
> since the branch is now open again? Thanks!

yes, I'm testing my jumbo set of patches there as I write :)

nathan

Comment 15 GCC Commits 2005-07-12 11:29:03 UTC
Subject: Bug 20789

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-4_0-branch
Changes by:	nathan@gcc.gnu.org	2005-07-12 11:28:03

Modified files:
	gcc/cp         : ChangeLog class.c cp-tree.def cp-tree.h decl.c 
	                 decl2.c error.c method.c parser.c pt.c 
	                 semantics.c 
	gcc/testsuite  : ChangeLog 
	gcc/testsuite/g++.dg/overload: error1.C 
	gcc/testsuite/g++.dg/parse: crash11.C 
	gcc/testsuite/g++.old-deja/g++.benjamin: warn02.C 
	gcc/testsuite/g++.old-deja/g++.brendan: arm2.C 
	gcc/testsuite/g++.old-deja/g++.other: redecl2.C redecl4.C 
	gcc/testsuite/g++.old-deja/g++.pt: memtemp78.C 
Added files:
	gcc/testsuite/g++.dg/abi: covariant5.C 
	gcc/testsuite/g++.dg/init: member1.C 
	gcc/testsuite/g++.dg/other: crash-4.C 
	gcc/testsuite/g++.dg/parse: crash26.C defarg9.C 

Log message:
	cp:
	PR c++/20678
	* error.c (dump_expr) <COMPONENT_REF case>: Check DECL_NAME is not
	null.
	
	PR 21903
	* cp-tree.def (DEFAULT_ARG): Document TREE_CHAIN use.
	* parser.c (cp_parser_late_parsing_default_args): Propagate parsed
	argument to any early instantiations.
	* pt.c (tsubst_arg_types): Chain early instantiation of default
	arg.
	
	PR c++/20789
	* decl.c (cp_finish_decl): Clear runtime runtime initialization if
	in-class decl's initializer is bad.
	
	PR c++/21929
	* parser.c (struct cp_parser): Document that scope could be
	error_mark.
	(cp_parser_diagnose_invalid_type_name): Cope with error_mark for
	scope.
	(cp_parser_nested_name_specifier): Return NULL_TREE on error.
	(cp_parser_postfix_expression): Deal with null or error_mark
	scope.
	(cp_parser_elaborated_type_specifier): Adjust
	cp_parser_nested_name_specifier call.
	
	PR c++/20746
	* method.c (use_thunk): Protect covariant pointer return
	adjustments from NULL pointers.
	testsuite:
	PR c++/20678
	* g++.dg/other/crash-4.C: New.
	
	PR 21903
	* g++.dg/parse/defarg9.C: New.
	
	PR c++/21929
	* g++.dg/parse/crash26.C: New.
	
	PR c++/20789
	* g++.dg/init/member1.C: New.
	
	PR c++/20746
	* g++.dg/abi/covariant5.C: New.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4648.2.63&r2=1.4648.2.64
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/class.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.707.2.3&r2=1.707.2.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cp-tree.def.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.94.4.2&r2=1.94.4.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cp-tree.h.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.1106.2.8&r2=1.1106.2.9
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.1371.2.14&r2=1.1371.2.15
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.770.2.2&r2=1.770.2.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/error.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.279.2.1&r2=1.279.2.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/method.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.322.4.4&r2=1.322.4.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.319.2.10&r2=1.319.2.11
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.978.2.12&r2=1.978.2.13
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/semantics.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.463.2.4&r2=1.463.2.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5084.2.268&r2=1.5084.2.269
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/abi/covariant5.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.10.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/member1.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.10.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/other/crash-4.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.8.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/overload/error1.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.2&r2=1.2.112.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/crash26.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.8.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/defarg9.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.10.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/crash11.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4&r2=1.4.28.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.benjamin/warn02.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4&r2=1.4.76.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.3&r2=1.3.76.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.other/redecl2.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.3&r2=1.3.76.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.other/redecl4.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.2&r2=1.2.76.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.3&r2=1.3.76.1

Comment 16 Nathan Sidwell 2005-07-12 11:29:18 UTC
fixed on 4.0 branch