https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102729

            Bug ID: 102729
           Summary: Assumed rank: ICE when passing noncontiguous to
                    CONTIGUOUS assume rank (assumed-rank loop handling)
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
  Target Milestone: ---

Related: PR 102708, PR54753, PR102641

That's an extended version of gfortran.dg/c-interop/fc-descriptor-7.f90

- - - -

  integer(C_INT), target :: bb(10,10)
  call ftest (bb(2:10:2, :), is_cont=.false._c_bool)
...
  subroutine ftest_ar (a, is_cont)
    use iso_c_binding
    integer(C_INT) :: a(..)
    logical(c_bool), value, intent(in) :: is_cont
...
    !call ftest_ar_con (a, is_cont=.true._c_bool)  ! <<< fixme!
  end subroutine

  subroutine ftest_ar_con (a, is_cont)
    use iso_c_binding
    integer(C_INT), contiguous :: a(..)
    logical(c_bool), value, intent(in) :: is_cont
....


That gives an ICE as the loop handling does not work
for rank == -1 (= assumed-rank arrays)

  124 |     call ftest_ar_con (a, is_cont=.true._c_bool)  ! <<< fixme!

internal compiler error: in gfc_trans_create_temp_array, at
fortran/trans-array.c:1491

0x6799b2 gfc_trans_create_temp_array(stmtblock_t*, stmtblock_t*, gfc_ss*,
tree_node*, tree_node*, bool, bool, bool, locus*)  fortran/trans-array.c:1491
0x98af9b gfc_conv_loop_setup(gfc_loopinfo*, locus*)  fortran/trans-array.c:5449
0x9be118 gfc_conv_subref_array_arg(gfc_se*, gfc_expr*, int, sym_intent, bool,
gfc_symbol const*, char const*, gfc_symbol*, bool)   fortran/trans-expr.c:4976

Reply via email to