Bug 107143 - ICE: 'verify_gimple' failed (Error: non-trivial conversion in 'mem_ref')
Summary: ICE: 'verify_gimple' failed (Error: non-trivial conversion in 'mem_ref')
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 13.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-checking, ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2022-10-04 04:50 UTC by Arseny Solokha
Modified: 2024-02-15 07:27 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail: 10.4.0, 11.3.0, 12.2.0, 13.0, 6.3.0, 7.3.0, 8.5.0, 9.4.0
Last reconfirmed: 2022-10-04 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arseny Solokha 2022-10-04 04:50:24 UTC
gfortran 13.0.0 20220925 snapshot (g:77bbf69d2981dafc2ef3e59bfbefb645d88bab9d) ICEs when compiling the following testcase w/ -fchecking, reduced from test/Lower/forall/array-pointer.f90 from the flang 15.0.1 test suite:

module array_of_pointer_test
  type ta
     integer, POINTER :: ip(:)
  end type ta

  type tb
     integer, POINTER :: ip(:,:)
  end type tb
end module array_of_pointer_test

subroutine s5(y,z,n1,n2)
  use array_of_pointer_test
  type(tb) :: y(:)
  type(ta), TARGET :: z(:)

  forall (i=1:10)
     y(i)%ip(1:n1,1:n2) => z(i)%ip
  end forall
end subroutine s5

% gfortran-13.0.0 -fchecking -c cmpwv2kw.f90
cmpwv2kw.f90:11:13:

   11 | subroutine s5(y,z,n1,n2)
      |             ^
Error: non-trivial conversion in 'mem_ref'
struct array02_integer(kind=4)
struct array01_integer(kind=4)
parm.12 = *_86;
cmpwv2kw.f90:11:13: internal compiler error: 'verify_gimple' failed
0xfbed2d verify_gimple_in_seq(gimple*)
	/var/tmp/portage/sys-devel/gcc-13.0.0_p20220925/work/gcc-13-20220925/gcc/tree-cfg.cc:5237
0xcad8e5 gimplify_body(tree_node*, bool)
	/var/tmp/portage/sys-devel/gcc-13.0.0_p20220925/work/gcc-13-20220925/gcc/gimplify.cc:17548
0xcadaaa gimplify_function_tree(tree_node*)
	/var/tmp/portage/sys-devel/gcc-13.0.0_p20220925/work/gcc-13-20220925/gcc/gimplify.cc:17664
0xacb9e7 cgraph_node::analyze()
	/var/tmp/portage/sys-devel/gcc-13.0.0_p20220925/work/gcc-13-20220925/gcc/cgraphunit.cc:676
0xace547 analyze_functions
	/var/tmp/portage/sys-devel/gcc-13.0.0_p20220925/work/gcc-13-20220925/gcc/cgraphunit.cc:1240
0xacf1ed symbol_table::finalize_compilation_unit()
	/var/tmp/portage/sys-devel/gcc-13.0.0_p20220925/work/gcc-13-20220925/gcc/cgraphunit.cc:2500
Comment 1 anlauf 2022-10-04 18:52:44 UTC
Confirmed.

Replacing the forall construct by an ordinary do loop avoids the ICE.
Comment 2 David Binderman 2024-02-15 07:27:47 UTC
(In reply to Arseny Solokha from comment #0)
> gfortran 13.0.0 20220925 snapshot
> (g:77bbf69d2981dafc2ef3e59bfbefb645d88bab9d) ICEs when compiling the
> following testcase w/ -fchecking, reduced from
> test/Lower/forall/array-pointer.f90 from the flang 15.0.1 test suite:

I can confirm that this is still happening on recent gfortran.

test $ /home/dcb38/gcc/results.20240214.asan.ubsan/bin/gfortran -c -w ./Lower/forall/array-pointer.f90
./Lower/forall/array-pointer.f90:486:13:

  486 | subroutine s5(x,y,z,n1,n2)
      |             ^
Error: non-trivial conversion in ‘mem_ref’
struct array02_integer(kind=4)
struct array01_integer(kind=4)
parm.85 = *_86;
./Lower/forall/array-pointer.f90:486:13: internal compiler error: ‘verify_gimple’ failed