The attach patch has been regression tested on x86_64-*-freebsd. There were no regression.
The patch prevents an ICE when checking for aliasing and the actual arguments are the real and imaginary parts of a complex entity. See the testcase for more information. OK to commit to both trunk and 9-branch? 2019-07-30 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/91296 * interface.c (compare_actual_expr): When checking for aliasing, add a case to handle REF_INQUIRY (e.g., foo(x%re, x%i) do not alias). 2019-07-30 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/91296 * gfortran.dg/pr91296.f90: New test. -- Steve
Index: gcc/fortran/interface.c =================================================================== --- gcc/fortran/interface.c (revision 273846) +++ gcc/fortran/interface.c (working copy) @@ -3489,6 +3489,13 @@ compare_actual_expr (gfc_expr *e1, gfc_expr *e2) case REF_SUBSTRING: return false; + case REF_INQUIRY: + if (e1->symtree->n.sym->ts.type == BT_COMPLEX + && e1->ts.type == BT_REAL && e2->ts.type == BT_REAL + && r1->u.i != r2->u.i) + return false; + break; + default: gfc_internal_error ("compare_actual_expr(): Bad component code"); } Index: gcc/testsuite/gfortran.dg/pr91296.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr91296.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr91296.f90 (working copy) @@ -0,0 +1,27 @@ +! { dg-do compile } +! { dg-options "-Waliasing" } +! PR fortran/91296 +! Code contributed by Chinoune Mehdi <chinoune dot medhi at hotmail dot com> +module m + implicit none + integer, parameter :: sp = selected_real_kind(6) + +contains + pure subroutine s(a,b,c) + real(sp), intent(in) :: a, b + real(sp), intent(out) :: c + c = a + b + end subroutine s +end module m + +program test + use m + implicit none + real(sp) :: a + complex(sp) :: c + + c = (1._sp,1._sp) + call s(c%re,c%im,a) ! *** This use to cause an ICE. *** + print*,a + +end program test