https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71446
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So like (untested): --- gcc/call.c.jj 2019-02-28 08:14:58.251562934 +0100 +++ gcc/call.c 2019-02-28 17:04:49.697357298 +0100 @@ -819,7 +819,7 @@ build_list_conv (tree type, tree ctor, i conversion **subconvs = alloc_conversions (len); conversion *t; unsigned i; - tree val; + tree val, idx; /* Within a list-initialization we can have more user-defined conversions. */ @@ -833,8 +833,12 @@ build_list_conv (tree type, tree ctor, i || VOID_TYPE_P (elttype)) return NULL; - FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val) + FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (ctor), i, idx, val) { + /* If there are any designators, ck_list is not valid. */ + if (idx != NULL_TREE) + return NULL; + conversion *sub = implicit_conversion (elttype, TREE_TYPE (val), val, false, flags, complain); @@ -1030,7 +1034,7 @@ build_complex_conv (tree type, tree ctor unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor); tree elttype = TREE_TYPE (type); unsigned i; - tree val; + tree idx, val; bool bad = false; bool user = false; enum conversion_rank rank = cr_exact; @@ -1040,8 +1044,12 @@ build_complex_conv (tree type, tree ctor flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING; - FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val) + FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (ctor), i, idx, val) { + /* If there are any designators, complex conv is not valid. */ + if (idx != NULL_TREE) + return NULL; + conversion *sub = implicit_conversion (elttype, TREE_TYPE (val), val, false, flags, complain); @@ -1896,7 +1904,7 @@ implicit_conversion (tree to, tree from, if (nelts == 0) elt = build_value_init (to, tf_none); - else if (nelts == 1) + else if (nelts == 1 && CONTRUCTOR_ELT (expr, 0)->index == NULL_TREE) elt = CONSTRUCTOR_ELT (expr, 0)->value; else elt = error_mark_node;