// { dg-do compile } // { dg-options "-O2" } template <typename T> struct A { static T b (T it) { return it; } };
template <typename T, typename U> static U baz (T x, T y, U z) { for (long n = y - x; n > 0; --n) { *z = *x; ++z; } }; template <typename T, typename U> U bar (T x, T y, U z) { baz (A <T>::b (x), A <T>::b (y), A <U>::b (z)); } struct C { __complex__ float v; }; template <class T> struct B { B (T y[]) { bar (y, y + 1, x); } operator T *() { return x; } T x[1]; }; B <C> foo () { C y[1]; return B <C> (y); }; ICEs in convert_move on x86_64. Works with 4.3 or 4.5. -- Summary: [4.4 Regression] ICE in convert_move Product: gcc Version: 4.4.3 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org GCC target triplet: x86_64-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42760