https://gcc.gnu.org/g:106282e3162023fb6262ae01afc1a64ed629e64e
commit 106282e3162023fb6262ae01afc1a64ed629e64e Author: Mikael Morin <[email protected]> Date: Fri Oct 16 10:53:41 2026 +0200 Correction partielle optional_absent_12 Diff: --- gcc/fortran/trans-expr.cc | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 5f585be8326a..5e70efb6758f 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -5834,11 +5834,13 @@ class_array_fcn: if (check_contiguous) { gfc_se cont_se, array_se; - stmtblock_t if_block, else_block; + stmtblock_t outer_block, if_block, else_block; tree if_stmt, else_stmt; mpz_t size; bool size_set; + gfc_init_block (&outer_block); + cont_var = gfc_create_var (boolean_type_node, "contiguous"); /* If the size is known to be one at compile-time, set @@ -5850,7 +5852,7 @@ class_array_fcn: size_set = gfc_array_size (expr, &size); if (size_set && mpz_cmp_ui (size, 1) == 0) { - gfc_add_modify (&se->pre, cont_var, + gfc_add_modify (&outer_block, cont_var, build_one_cst (boolean_type_node)); } else @@ -5862,9 +5864,9 @@ class_array_fcn: gfc_conv_span_is_elem_len (&cont_se, expr); else gfc_conv_is_contiguous_expr (&cont_se, expr); - gfc_add_block_to_block (&se->pre, &(&cont_se)->pre); - gfc_add_modify (&se->pre, cont_var, cont_se.expr); - gfc_add_block_to_block (&se->pre, &(&cont_se)->post); + gfc_add_block_to_block (&outer_block, &(&cont_se)->pre); + gfc_add_modify (&outer_block, cont_var, cont_se.expr); + gfc_add_block_to_block (&outer_block, &(&cont_se)->post); } if (size_set) @@ -5873,8 +5875,8 @@ class_array_fcn: /* arrayse->expr = descriptor of a. */ gfc_init_se (&array_se, se); gfc_conv_expr_descriptor (&array_se, expr); - gfc_add_block_to_block (&se->pre, &(&array_se)->pre); - gfc_add_block_to_block (&se->pre, &(&array_se)->post); + gfc_add_block_to_block (&outer_block, &array_se.pre); + gfc_add_block_to_block (&outer_block, &array_se.post); /* if_stmt = { descriptor ? pointer = a : pointer = &a[0]; } . */ gfc_init_block (&if_block); @@ -5898,10 +5900,12 @@ class_array_fcn: else_stmt = gfc_finish_block (&else_block); /* And put the above into an if statement. */ - pre_stmts = fold_build3_loc (input_location, COND_EXPR, void_type_node, - gfc_likely (cont_var, - PRED_FORTRAN_CONTIGUOUS), - if_stmt, else_stmt); + tree tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, + gfc_likely (cont_var, + PRED_FORTRAN_CONTIGUOUS), + if_stmt, else_stmt); + gfc_add_expr_to_block (&outer_block, tmp); + pre_stmts = gfc_finish_block (&outer_block); } else {
