https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84424
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW CC| |jakub at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I can reproduce with latest trunk too. The ICE is on: 1765 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (t)) 1766 field = next_initializable_field (TYPE_FIELDS (TREE_TYPE (t))); 1767 else 1768 field = NULL_TREE; where t is: <constructor 0x7fffefdb3228 type <vector_type 0x7fffefd9f9d8 vec type <integer_type 0x7fffefc625e8 int public type_6 SI size <integer_cst 0x7fffefc650c0 constant 32> unit-size <integer_cst 0x7fffefc650d8 constant 4> align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7fffefc625e8 precision:32 min <integer_cst 0x7fffefc65078 -2147483648> max <integer_cst 0x7fffefc65090 2147483647> pointer_to_this <pointer_type 0x7fffefc6aa80>> V2SI size <integer_cst 0x7fffefc45e70 constant 64> unit-size <integer_cst 0x7fffefc45e88 constant 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7fffefd72d20 nunits:2> constant tree_1 length:0> created in: 4783 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type)) 4784 { 4785 /* In C++14 an NSDMI can participate in aggregate initialization, 4786 and can refer to the address of the object being initialized, so 4787 we need to pass in the relevant VAR_DECL if we want to do the 4788 evaluation in a single pass. The evaluation will dynamically 4789 update ctx.values for the VAR_DECL. We use the same strategy 4790 for C++11 constexpr constructors that refer to the object being 4791 initialized. */ 4792 ctx.ctor = build_constructor (type, NULL); 4793 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctx.ctor) = true; VECTOR_TYPE obviously doesn't have TYPE_FIELDS. I guess we need to teach reduced_constant_expression_p how to handle VECTOR_TYPE constructors.