diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2015-05-25 20:59:27 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2015-05-25 20:59:27 +0000 |
commit | 2117b9bb988c489ff1a2233e066abc7cf9b136c1 (patch) | |
tree | d811c6f7bac6b6337a78000eea617b1e2544870c /gcc/ada/gcc-interface/trans.c | |
parent | f797c2b745ec8a1b5750900caf54c96dcbc904ca (diff) | |
download | gcc-2117b9bb988c489ff1a2233e066abc7cf9b136c1.zip gcc-2117b9bb988c489ff1a2233e066abc7cf9b136c1.tar.gz gcc-2117b9bb988c489ff1a2233e066abc7cf9b136c1.tar.bz2 |
decl.c (gnat_to_gnu_entity): Minor tweak.
* gcc-interface/decl.c (gnat_to_gnu_entity): Minor tweak.
* gcc-interface/trans.c (finalize_nrv_unc_r): Use CONSTRUCTOR_ELT.
* gcc-interface/utils.c (convert): Likewise and simplify.
(remove_conversions): Likewise.
* gcc-interface/utils2.c (compare_fat_pointers): Likewise.
(build_unary_op): Likewise and simplify.
From-SVN: r223653
Diffstat (limited to 'gcc/ada/gcc-interface/trans.c')
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 3c957a6..cb8662c 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -3309,12 +3309,12 @@ finalize_nrv_unc_r (tree *tp, int *walk_subtrees, void *data) if (TREE_CODE (ret_val) == COMPOUND_EXPR && TREE_CODE (TREE_OPERAND (ret_val, 0)) == INIT_EXPR) { + tree rhs = TREE_OPERAND (TREE_OPERAND (ret_val, 0), 1); + if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (ret_val))) - ret_val - = (*CONSTRUCTOR_ELTS (TREE_OPERAND (TREE_OPERAND (ret_val, 0), - 1)))[1].value; + ret_val = CONSTRUCTOR_ELT (rhs, 1)->value; else - ret_val = TREE_OPERAND (TREE_OPERAND (ret_val, 0), 1); + ret_val = rhs; } /* Strip useless conversions around the return value. */ @@ -3365,20 +3365,21 @@ finalize_nrv_unc_r (tree *tp, int *walk_subtrees, void *data) if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (alloc))) { + tree cst = TREE_OPERAND (alloc, 1); + /* The new initial value is a COMPOUND_EXPR with the allocation in the first arm and the value of P_ARRAY in the second arm. */ DECL_INITIAL (new_var) = build2 (COMPOUND_EXPR, TREE_TYPE (new_var), TREE_OPERAND (alloc, 0), - (*CONSTRUCTOR_ELTS (TREE_OPERAND (alloc, 1)))[0].value); + CONSTRUCTOR_ELT (cst, 0)->value); /* Build a modified CONSTRUCTOR that references NEW_VAR. */ p_array = TYPE_FIELDS (TREE_TYPE (alloc)); CONSTRUCTOR_APPEND_ELT (v, p_array, fold_convert (TREE_TYPE (p_array), new_var)); CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (p_array), - (*CONSTRUCTOR_ELTS ( - TREE_OPERAND (alloc, 1)))[1].value); + CONSTRUCTOR_ELT (cst, 1)->value); new_ret = build_constructor (TREE_TYPE (alloc), v); } else |