aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/trans.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2015-05-25 20:59:27 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2015-05-25 20:59:27 +0000
commit2117b9bb988c489ff1a2233e066abc7cf9b136c1 (patch)
treed811c6f7bac6b6337a78000eea617b1e2544870c /gcc/ada/gcc-interface/trans.c
parentf797c2b745ec8a1b5750900caf54c96dcbc904ca (diff)
downloadgcc-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.c15
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