https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78897
--- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Please notice that I've reduced this from a ICE on invalid posted on Reddit: markus@x4 /tmp % cat const.ii constexpr void *operator new(long unsigned int, void *where) { return where; } class Optional { public: explicit constexpr Optional() : _value{0} {} constexpr Optional(const Optional &o) : _dummy{0} { new (&this->_value) int(o._value); } private: union { char _dummy; int _value; }; }; int main() { constexpr Optional opt1{}; constexpr Optional opt2{opt1}; } markus@x4 /tmp % g++ const.ii const.ii: In function ‘int main()’: const.ii:21:22: internal compiler error: in complete_ctor_at_level_p, at expr.c:6022 constexpr Optional opt2{opt1}; ^~~~ 0xa2db7d complete_ctor_at_level_p(tree_node const*, long, tree_node const*) /home/markus/gcc/gcc/expr.c:6022 0xa2df01 categorize_ctor_elements_1 /home/markus/gcc/gcc/expr.c:5973 0xa2ddd0 categorize_ctor_elements_1 /home/markus/gcc/gcc/expr.c:5911 0xaefbcc gimplify_init_constructor /home/markus/gcc/gcc/gimplify.c:4622 0xaf1216 gimplify_modify_expr_rhs /home/markus/gcc/gcc/gimplify.c:5063 0xaf7f89 gimplify_modify_expr /home/markus/gcc/gcc/gimplify.c:5399 0xae65e2 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/markus/gcc/gcc/gimplify.c:11185 0xae9b18 gimplify_stmt(tree_node**, gimple**) /home/markus/gcc/gcc/gimplify.c:6460 0xaf5ba0 gimplify_and_add(tree_node*, gimple**) /home/markus/gcc/gcc/gimplify.c:435 0xaf5ba0 gimplify_decl_expr /home/markus/gcc/gcc/gimplify.c:1651 0xae656a gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/markus/gcc/gcc/gimplify.c:11380 0xae9b18 gimplify_stmt(tree_node**, gimple**) /home/markus/gcc/gcc/gimplify.c:6460 0xae5778 gimplify_cleanup_point_expr /home/markus/gcc/gcc/gimplify.c:6211 0xae5778 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/markus/gcc/gcc/gimplify.c:11560 0xae9b18 gimplify_stmt(tree_node**, gimple**) /home/markus/gcc/gcc/gimplify.c:6460 0xae6d6b gimplify_statement_list /home/markus/gcc/gcc/gimplify.c:1704 0xae6d6b gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/markus/gcc/gcc/gimplify.c:11612 0xae9b18 gimplify_stmt(tree_node**, gimple**) /home/markus/gcc/gcc/gimplify.c:6460 0xaeace5 gimplify_bind_expr /home/markus/gcc/gcc/gimplify.c:1277 0xae587a gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/markus/gcc/gcc/gimplify.c:11384 Not sure if this is cased by the same underlying bug.