https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69715
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2016-02-08 CC| |trippels at gcc dot gnu.org Component|c++ |middle-end Ever confirmed|0 |1 Severity|blocker |normal --- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- All supported gcc versions ICE. markus@x4 tmp % cat cra.ii namespace streflop { template <int> struct A { operator long double() const; }; namespace SoftFloat { typedef struct { long long low; int high; } floatx80; floatx80 fn1(int); } using namespace SoftFloat; template <> A<32>::operator long double() const { long double a; *reinterpret_cast<floatx80 *>(&a) = fn1(0); return a; } } markus@x4 tmp % /var/tmp/gcc_test/usr/local/bin/g++ -c -m32 -O3 cra.ii cra.ii: In member function ‘streflop::A<<anonymous> >::operator long double() const [with int <anonymous> = 32]’: cra.ii:13:45: internal compiler error: in store_bit_field_1, at expmed.c:839 *reinterpret_cast<floatx80 *>(&a) = fn1(0); ^ 0x9d7d8e store_bit_field_1 ../../gcc/gcc/expmed.c:839 0x9d7e8c store_bit_field(rtx_def*, unsigned long, unsigned long, unsigned long, unsigned long, machine_mode, rtx_def*, bool) ../../gcc/gcc/expmed.c:1111 0x9f906c store_field ../../gcc/gcc/expr.c:6769 0x9f4b41 expand_assignment(tree_node*, tree_node*, bool) ../../gcc/gcc/expr.c:5021 0x8e7a2a expand_call_stmt ../../gcc/gcc/cfgexpand.c:2646 0x8e7a2a expand_gimple_stmt_1 ../../gcc/gcc/cfgexpand.c:3536 0x8e7a2a expand_gimple_stmt ../../gcc/gcc/cfgexpand.c:3702 0x8eaa96 expand_gimple_basic_block ../../gcc/gcc/cfgexpand.c:5708 0x8ef8d6 execute ../../gcc/gcc/cfgexpand.c:6323