Bug 11041

Summary: [3.3/3.4 regression] ICE: const myclass &x = *x; (when operator*() defined)
Product: gcc Reporter: Joel Yliluoma <bisqwit>
Component: middle-endAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: gcc-bugs, los
Priority: P3 Keywords: ice-on-valid-code
Version: 3.3   
Target Milestone: 3.3.1   
Host: i386-pc-linux-gnu Target: i386-pc-linux-gnu
Build: i386-pc-linux-gnu Known to work:
Known to fail: Last reconfirmed: 2003-05-31 10:08:07

Description Joel Yliluoma 2003-05-31 02:25:37 UTC
	g++-3.3 and g++-3.2 give this error message
	"internal compiler error: in make_decl_rtl, at varasm.c:797"
	for the following code (see How-To-Repeat section).
	g++-2.95 did also:
	"Internal compiler error in `expand_expr', at expr.c:5850"

Environment:
System: Linux hikaru 2.4.20 #2 Fri Feb 21 01:53:29 EET 2003 i686 GNU/Linux
Architecture: i686

	
host: i386-pc-linux-gnu
build: i386-pc-linux-gnu
target: i386-pc-linux-gnu
configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --w
ithout-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i386-linux

How-To-Repeat:
    Try compiling this:
	class hop
        {
        public:
            hop operator* () const;
        };
        int main(void)
        {
            const hop &x = *x;
        }
Comment 1 Dara Hazeghi 2003-05-31 10:08:07 UTC
This same problem also occurs on mainline (20030527).

Dara
Comment 2 Volker Reichelt 2003-06-02 12:37:10 UTC
I think the code is well-formed (although a warning would be nice).
The code actually compiles with gcc 3.0.x, but ICE's with gcc 2.95.x
and since 3.1.
Thus, we have a regression.
Comment 3 Volker Reichelt 2003-06-02 17:47:22 UTC
Probably related to PR 4907.
Comment 4 Volker Reichelt 2003-06-19 19:38:39 UTC
The bug (also PR 4907) is fixed on the tree-ssa-branch.
Comment 5 Andrew Pinski 2003-06-19 19:48:53 UTC
Changing this to the middle end because the ICE is in varasm.c or expr.c which is in the middle-
end
Comment 6 GCC Commits 2003-06-20 00:48:51 UTC
Subject: Bug 11041

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	mmitchel@gcc.gnu.org	2003-06-20 00:48:44

Modified files:
	gcc/cp         : ChangeLog call.c cp-tree.h decl.c decl.h 
	                 decl2.c rtti.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/init: ref7.C 

Log message:
	PR c++/11041
	* call.c (initialize_reference): Do not use cp_finish_decl to emit
	temporary variables.
	* cp-tree.h (static_aggregates): Declare.
	(pushdecl_top_level_and_finish): Likewise.
	* decl.c (pushdecl_top_level_1): New function.
	(pushdecl_top_level): Use it.
	(pushdecl_top_level_and_finish): New function.
	(initialize_local_var): Remove redundant code.
	(cp_finish_decl): Remove support for RESULT_DECLs.  Don't check
	building_stmt_tree.
	* decl.h (static_aggregates): Remove.
	* decl2.c (get_guard): Use pushdecl_top_level_and_finish.
	* rtti.c (get_tinfo_decl): Use pushdecl_top_level_and_finish.
	(tinfo_base_init): Likewise.
	
	PR c++/11041
	* g++.dg/init/ref7.C: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3439&r2=1.3440
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/call.c.diff?cvsroot=gcc&r1=1.387&r2=1.388
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cp-tree.h.diff?cvsroot=gcc&r1=1.856&r2=1.857
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&r1=1.1067&r2=1.1068
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.h.diff?cvsroot=gcc&r1=1.10&r2=1.11
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&r1=1.629&r2=1.630
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/rtti.c.diff?cvsroot=gcc&r1=1.163&r2=1.164
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2781&r2=1.2782
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/ref7.C.diff?cvsroot=gcc&r1=NONE&r2=1.1

Comment 7 GCC Commits 2003-06-20 01:18:51 UTC
Subject: Bug 11041

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_3-branch
Changes by:	mmitchel@gcc.gnu.org	2003-06-20 01:18:48

Modified files:
	gcc/cp         : ChangeLog call.c cp-tree.h decl.c decl.h 
	                 decl2.c rtti.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/init: ref7.C 

Log message:
	PR c++/11041
	* call.c (initialize_reference): Do not use cp_finish_decl to emit
	temporary variables.
	* cp-tree.h (static_aggregates): Declare.
	(pushdecl_top_level_and_finish): Likewise.
	* decl.c (pushdecl_top_level_1): New function.
	(pushdecl_top_level): Use it.
	(pushdecl_top_level_and_finish): New function.
	(initialize_local_var): Remove redundant code.
	(cp_finish_decl): Remove support for RESULT_DECLs.  Don't check
	building_stmt_tree.
	* decl.h (static_aggregates): Remove.
	* decl2.c (get_guard): Use pushdecl_top_level_and_finish.
	* rtti.c (get_tinfo_decl): Use pushdecl_top_level_and_finish.
	(tinfo_base_init): Likewise.
	
	PR c++/11041
	* g++.dg/init/ref7.C: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.3076.2.153&r2=1.3076.2.154
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/call.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.341.2.20&r2=1.341.2.21
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cp-tree.h.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.776.2.21&r2=1.776.2.22
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.965.2.48&r2=1.965.2.49
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.h.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.8&r2=1.8.20.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.575.2.29&r2=1.575.2.30
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/rtti.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.146.2.1&r2=1.146.2.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.191&r2=1.2261.2.192
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/ref7.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1

Comment 8 Mark Mitchell 2003-06-20 01:22:21 UTC
Fixed in GCC 3.3.1, GCC 3.4.
Comment 9 Mark Mitchell 2003-06-20 01:23:50 UTC
*** Bug 4907 has been marked as a duplicate of this bug. ***