aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-intrinsic.c
diff options
context:
space:
mode:
authorSandra Loosemore <sandra@codesourcery.com>2022-01-06 11:23:18 -0800
committerSandra Loosemore <sandra@codesourcery.com>2022-01-06 17:34:35 -0800
commit55385f12f604fe242030f0a8fb057598c0f187a6 (patch)
tree1c067ab8b44eb18982ae18616df52a822cf23720 /gcc/fortran/trans-intrinsic.c
parent32d8ff73718fd07a9a7dfd2566d3b7b69f37b6bd (diff)
downloadgcc-55385f12f604fe242030f0a8fb057598c0f187a6.zip
gcc-55385f12f604fe242030f0a8fb057598c0f187a6.tar.gz
gcc-55385f12f604fe242030f0a8fb057598c0f187a6.tar.bz2
Fortran: Fix handling of optional argument to SIZE intrinsic [PR103898]
This patch fixes a think-o in the code that triggered an ICE in the test case. 2021-01-06 Sandra Loosemore <sandra@codesourcery.com> PR fortran/103898 gcc/fortran/ * trans-intrinsic.c (gfc_conv_intrinsic_size): Make size_var actually be a variable and fix surrounding code. gcc/testsuite/ * gfortran.dg/pr103898.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-intrinsic.c')
-rw-r--r--gcc/fortran/trans-intrinsic.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 41252c9..aae34b0 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -8006,10 +8006,14 @@ gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr)
cond = gfc_evaluate_now (cond, &se->pre);
/* 'block2' contains the arg2 absent case, 'block' the arg2 present
case; size_var can be used in both blocks. */
- tree size_var = gfc_tree_array_size (&block2, arg1, e, NULL_TREE);
+ tree size_var = gfc_create_var (TREE_TYPE (size), "size");
tmp = fold_build2_loc (input_location, MODIFY_EXPR,
TREE_TYPE (size_var), size_var, size);
gfc_add_expr_to_block (&block, tmp);
+ size = gfc_tree_array_size (&block2, arg1, e, NULL_TREE);
+ tmp = fold_build2_loc (input_location, MODIFY_EXPR,
+ TREE_TYPE (size_var), size_var, size);
+ gfc_add_expr_to_block (&block2, tmp);
tmp = build3_v (COND_EXPR, cond, gfc_finish_block (&block),
gfc_finish_block (&block2));
gfc_add_expr_to_block (&se->pre, tmp);