Compiling attached source fails with ICE: $ gcc -std=c++11 gcc-bug.cpp --save-temps gcc-bug.cpp: In instantiation of 'constexpr ClassA<T1>::ClassA(U1&&) [with U1 = int; T1 = const ClassB&]': gcc-bug.cpp:34:3: required from here gcc-bug.cpp:22:12: internal compiler error: in build_data_member_initialization, at cp/semantics.c:5790 GCC version dump: $ gcc -v Using built-in specs. COLLECT_GCC=C:\MinGW\bin\gcc.exe COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/i686-w64-mingw32/4.7.2/lto-wrapp er.exe Target: i686-w64-mingw32 Configured with: ../..//mingw-src/gcc-4_7-branch/configure --host=i686-w64-mingw 32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw-gcc-4_7-br anch-x32 --with-sysroot=/mingw-gcc-4_7-branch-x32 --enable-shared --enable-stati c --enable-targets=all --enable-multilib --enable-languages=c,c++,fortran,lto -- enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-lto - -enable-graphite --enable-cloog-backend=isl --enable-checking=release --enable-f ully-dynamic-string --enable-version-specific-runtime-libs --enable-sjlj-excepti ons --disable-ppl-version-check --disable-cloog-version-check --disable-libstdcx x-pch --disable-libstdcxx-debug --disable-bootstrap --disable-rpath --disable-wi n32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-ld --wi th-tune=generic --with-host-libstdcxx='-static -lstdc++' --with-libiconv --with- gmp=/mingw-gcc-4_7-branch-libs-x32 --with-mpfr=/mingw-gcc-4_7-branch-libs-x32 -- with-mpc=/mingw-gcc-4_7-branch-libs-x32 --with-ppl=/mingw-gcc-4_7-branch-libs-x3 2 --with-cloog=/mingw-gcc-4_7-branch-libs-x32 --with-pkgversion='MinGW-builds: h ttp://sourceforge.net/projects/mingwbuilds/' --with-bugurl=http://sourceforge.ne t/projects/mingwbuilds/ CFLAGS='-O2 -pipe -fomit-frame-pointer -momit-leaf-frame -pointer -I/mingw-gcc-4_7-branch-libs-x32/include' CXXFLAGS='-O2 -pipe -fomit-fr ame-pointer -momit-leaf-frame-pointer' CPPFLAGS= LDFLAGS='-pipe -s -L/mingw-gcc- 4_7-branch-libs-x32/lib -L/mingw-gcc-4_7-branch-x32/bin' Thread model: posix gcc version 4.7.2 20120727 (prerelease) (MinGW-builds: http://sourceforge.net/pr ojects/mingwbuilds/)
The attachment is missing
Created attachment 27896 [details] Preprocessed source
Reduced source: namespace std { template<class _E> class initializer_list { }; } using namespace std; class ClassB { public: constexpr ClassB(int x) {} }; template<class T1> struct ClassA { template<class U1> constexpr ClassA(U1 &&a) : a_(a) {} T1 a_; }; void f(std::initializer_list<ClassA<const ClassB&>> l) { f({ {1} }); }
Created attachment 29430 [details] simple fail case I think I have an even simplier test case, I guess it's the same problem (at least the ICE message matches). I also think that bug 51707 is actually the same problem.
(In reply to comment #4) > Created attachment 29430 [details] > simple fail case > > I think I have an even simplier test case, I guess it's the same problem (at > least the ICE message matches). I also think that bug 51707 is actually the > same problem. Yes, looks like both mine and yours testcase actually do the same - they attempt to move some constexpr to another, and gcc fails. That looks like not implemented or buggy check for error. bug 51707 looks to be error on correct code and possibly fails on getting constant l-value reference. If they are exactly the same, then the bug actually lies in contexpr reference mechanics, and gcc fails on getting constexpr reference of any kind, not on moving constexpr. I'll try to investigate if it is the case as soon as I have some free time.
Fixed long time ago. ICEs with improperly reduced testcases involving std::initializer_list (per Comment #3) are fixed in mainline (Dup of c++/60848, c++/61723).