This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/51723] New: [C++0x] delegating constructor ICE


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51723

             Bug #: 51723
           Summary: [C++0x] delegating constructor ICE
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: andyg1001@hotmail.co.uk


The following reduced code generates an ICE in gcc version 4.7.0 20111219:

template <int... V>
struct A
  {
  static constexpr int a[sizeof...(V)] = { V... };
  };

template <int... V> constexpr int A<V...>::a[];

struct B
  {
  const int* const b;

  template <unsigned int N>
  constexpr B(const int(&b)[N])
      : b(b)
    { }

  template <int... V>
  constexpr B(A<V...>)
      : B(A<V...>::a)  /* replace 'B' with 'b' to compile without ICE */
    { }
  };

constexpr B works      = A<10, 20, 30>::a; /* uses first ctor  */
constexpr B causes_ice = A<10, 20, 30>();  /* uses second ctor */

The ICE occurs around the delegating constructor, but the code compiles
correctly if it is substituted for a non-delegating form of the constructor.

The message from gcc is:

ice.cpp: In instantiation of 'constexpr B::B(A<V ...>) [with int ...V = {10,
20, 30}]':
ice.cpp:25:40:   required from here
ice.cpp:21:7: internal compiler error: in build_data_member_initialization, at
cp/semantics.c:5844
Please submit a full bug report,
with preprocessed source if appropriate.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]