diff options
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r-- | gcc/cp/cvt.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index cb179d5..5db4146 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -699,7 +699,20 @@ ocp_convert (tree type, tree expr, int convtype, int flags) if (POINTER_TYPE_P (type) || TYPE_PTR_TO_MEMBER_P (type)) return fold (cp_convert_to_pointer (type, e, false)); if (code == VECTOR_TYPE) - return fold (convert_to_vector (type, e)); + { + tree in_vtype = TREE_TYPE (e); + if (IS_AGGR_TYPE (in_vtype)) + { + tree ret_val; + ret_val = build_type_conversion (type, e); + if (ret_val) + return ret_val; + if (flags & LOOKUP_COMPLAIN) + error ("`%#T' used where a `%T' was expected", in_vtype, type); + return error_mark_node; + } + return fold (convert_to_vector (type, e)); + } if (code == REAL_TYPE || code == COMPLEX_TYPE) { if (IS_AGGR_TYPE (TREE_TYPE (e))) |