https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61465
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- And on struct Baz { Baz(char* x) : y{x} {} char* y; }; x is marked through: #0 mark_exp_read (exp=<parm_decl 0x7ffff19fe680 x>) at ../../gcc/cp/expr.c:135 #1 0x000000000067aea6 in mark_rvalue_use (expr=<parm_decl 0x7ffff19fe680 x>) at ../../gcc/cp/expr.c:99 #2 0x00000000007a53e6 in decay_conversion (exp=<parm_decl 0x7ffff19fe680 x>, complain=3) at ../../gcc/cp/typeck.c:1915 #3 0x000000000062492c in convert_like_real (convs=0x20d6630, expr=<parm_decl 0x7ffff19fe680 x>, fn=<tree 0x0>, argnum=0, inner=0, issue_conversion_warnings=true, c_cast_p=false, complain=3) at ../../gcc/cp/call.c:6331 #4 0x0000000000630bd3 in perform_implicit_conversion_flags (type=<pointer_type 0x7ffff18d19d8>, expr=<constructor 0x7ffff19fa8b8>, complain=3, flags=1) at ../../gcc/cp/call.c:9315 #5 0x00000000007bb105 in convert_for_assignment (type=<pointer_type 0x7ffff18d19d8>, rhs=<constructor 0x7ffff19fa8b8>, errtype=ICR_INIT, fndecl=<tree 0x0>, parmnum=0, complain=3, flags=1) at ../../gcc/cp/typeck.c:8233 #6 0x00000000007bb65f in convert_for_initialization (exp=<component_ref 0x7ffff19a1b10>, type=<pointer_type 0x7ffff18d19d8>, rhs=<constructor 0x7ffff19fa8b8>, flags=1, errtype=ICR_INIT, fndecl=<tree 0x0>, parmnum=0, complain=3) at ../../gcc/cp/typeck.c:8324 #7 0x00000000007b933d in cp_build_modify_expr (lhs=<component_ref 0x7ffff19a1b10>, modifycode=INIT_EXPR, rhs=<constructor 0x7ffff19fa8b8>, complain=3) at ../../gcc/cp/typeck.c:7593 #8 0x00000000007ced80 in perform_member_init (member=<field_decl 0x7ffff19eeab0 y>, init=<constructor 0x7ffff19fa8b8>) at ../../gcc/cp/init.c:771 #9 0x00000000007d0535 in emit_mem_initializers (mem_inits=<tree_list 0x7ffff1a004b0>) at ../../gcc/cp/init.c:1136 #10 0x00000000007f895c in finish_mem_initializers (mem_inits=<tree_list 0x7ffff1a00488>) at ../../gcc/cp/semantics.c:1603 cp_build_modify_expr is still called even in the Foo::Foo(void*) case, with a CONSTRUCTOR containing NOP_EXPR of PARM_DECL, so either we should mark_exp_read when creating the CONSTRUCTOR, which would be roughly in cp_parser_initializer_list ??, or when processing the ctor. Jason, any preferences?