The following invalid code snippet triggers an ICE since GCC 4.2.0: =================================== struct A { void foo(); void bar(int i) { void (*p)() = i ? foo : foo; } }; =================================== bug.cc: In member function 'void A::bar(int)': bug.cc:7: internal compiler error: in instantiate_type, at cp/class.c:6280 Please submit a full bug report, [etc.]
Confirmed.
Subject: Bug 37646 Author: jason Date: Thu Jan 15 18:14:32 2009 New Revision: 143404 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=143404 Log: PR c++/36334 PR c++/37646 * tree.c (lvalue_p_1): Handle BASELINK. A COMPONENT_REF to a function isn't necessarily an lvalue. Take tree, not const_tree. (lvalue_p, real_lvalue_p): Take tree, not const_tree. * typeck.c (lvalue_or_else): Likewise. * cp-tree.h: Adjust prototypes. Added: trunk/gcc/testsuite/g++.dg/conversion/memfn1.C trunk/gcc/testsuite/g++.dg/conversion/memfn2.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/cp-tree.h trunk/gcc/cp/tree.c trunk/gcc/cp/typeck.c trunk/gcc/testsuite/ChangeLog
Subject: Bug 37646 Author: jason Date: Thu Jan 15 22:34:20 2009 New Revision: 143413 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=143413 Log: PR c++/36334 PR c++/37646 * tree.c (lvalue_p_1): Handle BASELINK. A COMPONENT_REF to a function isn't necessarily an lvalue. Take tree, not const_tree. (lvalue_p, real_lvalue_p): Take tree, not const_tree. * typeck.c (lvalue_or_else): Likewise. * cp-tree.h: Adjust prototypes. PR c++/31488 * tree.c (pod_type_p): Return 1 for structs created by the back end. Added: branches/gcc-4_3-branch/gcc/testsuite/g++.dg/conversion/memfn1.C - copied unchanged from r143404, trunk/gcc/testsuite/g++.dg/conversion/memfn1.C branches/gcc-4_3-branch/gcc/testsuite/g++.dg/conversion/memfn2.C - copied unchanged from r143404, trunk/gcc/testsuite/g++.dg/conversion/memfn2.C branches/gcc-4_3-branch/gcc/testsuite/g++.dg/other/vararg-3.C - copied unchanged from r143308, trunk/gcc/testsuite/g++.dg/other/vararg-3.C Modified: branches/gcc-4_3-branch/gcc/cp/ChangeLog branches/gcc-4_3-branch/gcc/cp/cp-tree.h branches/gcc-4_3-branch/gcc/cp/tree.c branches/gcc-4_3-branch/gcc/cp/typeck.c branches/gcc-4_3-branch/gcc/testsuite/ChangeLog
Fixed for 4.3 and 4.4, not fixing for 4.2.