Bug 20153 - [3.4 Regression] ICE when C++ template function contains anonymous union
Summary: [3.4 Regression] ICE when C++ template function contains anonymous union
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.4.3
: P2 normal
Target Milestone: 3.4.5
Assignee: Volker Reichelt
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: ice-on-invalid-code, monitored, patch
Depends on:
Blocks:
 
Reported: 2005-02-22 20:17 UTC by Udo Steinberg
Modified: 2005-09-01 11:49 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work: 3.3.3 4.0.0
Known to fail: 3.4.0
Last reconfirmed: 2005-02-22 20:22:12


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Udo Steinberg 2005-02-22 20:17:18 UTC
The following program causes an internal compiler error when compiled with
gcc-3.4.3 or gcc-4.0 (CVS):

template <typename T>
class C
{
    public:
        void foo();
};

template <typename T>
void
C<T>::foo()
{
    union {
        struct {
        };
    };
};

int main()
{
    return 0;
}
Comment 1 Andrew Pinski 2005-02-22 20:22:12 UTC
Reduced to:
template <typename T>
void
foo()
{
    union { struct {  };  };
}


This is invalid code, if we do without template function we get an error:
t.cc: In function ‘void foo()’:
t.cc:8: error: anonymous struct not inside named type
t.cc:8: warning: anonymous union with no members
Comment 2 Andrew Pinski 2005-02-23 00:00:14 UTC
: Search converges between 2003-01-15-trunk (#165) and 2003-01-17-trunk (#166).
Comment 3 CVS Commits 2005-02-23 05:31:34 UTC
Subject: Bug 20153

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	mmitchel@gcc.gnu.org	2005-02-23 05:30:51

Modified files:
	gcc/testsuite/g++.dg/template: qualttp15.C 
	gcc/testsuite/g++.old-deja/g++.other: struct1.C 
	gcc/testsuite  : ChangeLog 
	gcc/cp         : ChangeLog decl2.c error.c init.c parser.c 
	                 semantics.c 
Added files:
	gcc/testsuite/g++.dg/parse: constant7.C error27.C error26.C 
	gcc/testsuite/g++.dg/template: error17.C 

Log message:
	PR c++/19991
	* init.c (integral_constant_value): Iterate if the value of a decl
	is itself a constant.
	
	PR c++/20152
	* parser.c (cp_parser_class_head): Check for redefintions here.
	* semantics.c (begin_class_definition): Not here.
	
	PR c++/20153
	* decl2.c (build_anon_union_vars): Add type parameter.
	(finish_anon_union): Pass it.
	
	PR c++/20148
	* error.c (dump_expr): Do not print the body of a BIND_EXPR.
	Handle STATEMENT_LIST.
	
	PR c++/19991
	* g++.dg/parse/constant7.C: New test.
	
	PR c++/20152
	* g++.dg/parse/error27.C: New test.
	* g++.dg/template/qualttp15.C: Adjust error markers.
	* g++.old-deja/g++.other/struct1.C: Likewise.
	
	PR c++/20153
	* g++.dg/template/error17.C: New test.
	
	PR c++/20148
	* g++.dg/parser/error26.C: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/constant7.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/error27.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/error26.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/error17.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/qualttp15.C.diff?cvsroot=gcc&r1=1.1&r2=1.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.other/struct1.C.diff?cvsroot=gcc&r1=1.3&r2=1.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.5072&r2=1.5073
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4641&r2=1.4642
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&r1=1.768&r2=1.769
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/error.c.diff?cvsroot=gcc&r1=1.276&r2=1.277
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/init.c.diff?cvsroot=gcc&r1=1.410&r2=1.411
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&r1=1.317&r2=1.318
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/semantics.c.diff?cvsroot=gcc&r1=1.462&r2=1.463

Comment 4 Mark Mitchell 2005-02-23 05:36:05 UTC
Fixed in 4.0.
Comment 5 Volker Reichelt 2005-09-01 09:13:25 UTC
Taking care of the backport to the 3.4 branch.
Comment 6 CVS Commits 2005-09-01 11:47:54 UTC
Subject: Bug 20153

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_4-branch
Changes by:	reichelt@gcc.gnu.org	2005-09-01 11:47:42

Modified files:
	gcc/cp         : ChangeLog decl2.c call.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/template: error17.C 
	gcc/testsuite/g++.dg/expr: ptrmem7.C 

Log message:
	Backport:
	
	2005-02-22  Mark Mitchell  <mark@codesourcery.com>
	PR c++/20153
	* decl2.c (build_anon_union_vars): Add type parameter.
	(finish_anon_union): Pass it.
	
	* g++.dg/template/error17.C: New test.
	
	2005-07-28  Mark Mitchell  <mark@codesourcery.com>
	PR c++/22545
	* call.c (add_builtin_candidate): Adjust for changes in
	representation of pointer-to-member types.
	
	* g++.dg/expr/ptrmem7.C: New test.

Patches:
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.232&r2=1.3892.2.233
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.695.4.10&r2=1.695.4.11
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/call.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.452.2.27&r2=1.452.2.28
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.423&r2=1.3389.2.424
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/error17.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.40.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/expr/ptrmem7.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.12.1

Comment 7 Volker Reichelt 2005-09-01 11:49:30 UTC
Fixed also on the 3.4 branch.