re PR fortran/91296 (ICE when passing complex number %re/%im as a procedure argument...
authorSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 30 Jul 2019 20:02:27 +0000 (20:02 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 30 Jul 2019 20:02:27 +0000 (20:02 +0000)
2019-07-30  Steven G. Kargl  <kargl@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%im) do not alias).

2019-07-30  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91296
* gfortran.dg/pr91296.f90: New test.

From-SVN: r273914

gcc/fortran/ChangeLog
gcc/fortran/interface.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr91296.f90 [new file with mode: 0644]

index dc965ea..fd55ca7 100644 (file)
@@ -1,3 +1,9 @@
+2019-07-30  Steven G. Kargl  <kargl@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%im) do not alias).
+
 2019-07-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/90813
index f971586..1d14f83 100644 (file)
@@ -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 bad5687..6afc2f0 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-30  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91296
+       * gfortran.dg/pr91296.f90: New test.
+
 2019-07-30  Martin Liska  <mliska@suse.cz>
 
        PR tree-optimization/91270
diff --git a/gcc/testsuite/gfortran.dg/pr91296.f90 b/gcc/testsuite/gfortran.dg/pr91296.f90
new file mode 100644 (file)
index 0000000..5f7bb0e
--- /dev/null
@@ -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