diff options
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r-- | gcc/cp/init.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 526d68f..b8ec78a 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2774,7 +2774,10 @@ build_vec_init (base, init, from_array) if (init && TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == NULL_TREE) init = digest_init (atype, init, 0); - if (init && !TYPE_NEEDS_CONSTRUCTING (type) + if (init + && (from_array == 2 + ? (!CLASS_TYPE_P (type) || !TYPE_HAS_COMPLEX_ASSIGN_REF (type)) + : !TYPE_NEEDS_CONSTRUCTING (type)) && ((TREE_CODE (init) == CONSTRUCTOR /* Don't do this if the CONSTRUCTOR might contain something that might throw and require us to clean up. */ |