Bug 37646 - [4.2 regression] ICE with function vs. member function
Summary: [4.2 regression] ICE with function vs. member function
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.4.0
: P2 normal
Target Milestone: 4.2.5
Assignee: Jason Merrill
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: ice-on-invalid-code, monitored
Depends on:
Blocks:
 
Reported: 2008-09-25 06:57 UTC by Volker Reichelt
Modified: 2009-01-15 22:57 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work: 4.1.2 4.4.0
Known to fail: 4.2.0
Last reconfirmed: 2009-01-14 23:24:30


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Volker Reichelt 2008-09-25 06:57:45 UTC
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.]
Comment 1 Drea Pinski 2008-09-28 19:55:19 UTC
Confirmed.
Comment 2 Jason Merrill 2009-01-15 18:14:48 UTC
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

Comment 3 Jason Merrill 2009-01-15 22:34:38 UTC
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

Comment 4 Jason Merrill 2009-01-15 22:57:39 UTC
Fixed for 4.3 and 4.4, not fixing for 4.2.