diff options
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r-- | gcc/cp/pt.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index e2ffe7314c4..3847a1d6154 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12464,6 +12464,7 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl) case COND_EXPR: case MODOP_EXPR: case PSEUDO_DTOR_EXPR: + case VEC_PERM_EXPR: { r = build_nt (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), @@ -13761,9 +13762,6 @@ tsubst_copy_and_build (tree t, start_index = RECUR (ARRAY_NOTATION_START (t)); length = RECUR (ARRAY_NOTATION_LENGTH (t)); stride = RECUR (ARRAY_NOTATION_STRIDE (t)); - if (!cilkplus_an_triplet_types_ok_p (loc, start_index, length, stride, - TREE_TYPE (op1))) - RETURN (error_mark_node); RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index, length, stride, TREE_TYPE (op1))); } @@ -14628,6 +14626,13 @@ tsubst_copy_and_build (tree t, case PAREN_EXPR: RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0)))); + case VEC_PERM_EXPR: + RETURN (build_x_vec_perm_expr (input_location, + RECUR (TREE_OPERAND (t, 0)), + RECUR (TREE_OPERAND (t, 1)), + RECUR (TREE_OPERAND (t, 2)), + complain)); + default: /* Handle Objective-C++ constructs, if appropriate. */ { @@ -15739,9 +15744,6 @@ type_unification_real (tree tparms, arg = args[ia]; ++ia; - if (flag_enable_cilkplus && TREE_CODE (arg) == ARRAY_NOTATION_REF) - return 1; - if (unify_one_argument (tparms, targs, parm, arg, subr, strict, flags, explain_p)) return 1; @@ -19162,11 +19164,6 @@ instantiate_decl (tree d, int defer_ok, pointer_map_destroy (local_specializations); local_specializations = saved_local_specializations; - /* We expand all the array notation expressions here. */ - if (flag_enable_cilkplus - && contains_array_notation_expr (DECL_SAVED_TREE (d))) - DECL_SAVED_TREE (d) = expand_array_notation_exprs (DECL_SAVED_TREE (d)); - /* Finish the function. */ d = finish_function (0); expand_or_defer_fn (d); |