]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
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 21:38:48 +0000 (21:38 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Tue, 30 Jul 2019 21:38:48 +0000 (21:38 +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: r273916

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

index c7a3df6bc590903fbf509105f1481a8b2a24c256..c7162f19b73606b1a70a3db2b9d5d4afb0b755cc 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>
        Paul Thomas <pault@gcc.gnu.org>
 
index e7aebbcf9871785c6f66596e6bd9340472ed80be..bee98129bc1b5680b67e9ab2ec89fe15dfa8aaf3 100644 (file)
@@ -3488,6 +3488,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 643e3e5a5cdad82de78b23b9a0711034e651d60e..8765c2c442265e607e8ee8cbc4d132deaa17bd91 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-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
        Paul Thomas <pault@gcc.gnu.org>
 
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