]> gcc.gnu.org Git - gcc.git/commitdiff
backport: re PR fortran/83246 (internal compiler error or loader problem might be...
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 11:36:10 +0000 (13:36 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 11:36:10 +0000 (13:36 +0200)
Backported from mainline
2019-02-01  Jakub Jelinek  <jakub@redhat.com>

PR fortran/83246
PR fortran/89084
* trans-decl.c (generate_local_decl): Add referenced FL_PARAMETERs
if sym->ns->construct_entities rather than if
sym->ns->parent->code->op == EXEC_BLOCK.

* gfortran.dg/pr89084.f90: New test.
* gfortran.dg/lto/pr89084_0.f90: New test.
* gfortran.dg/pr83246.f90: New test.

From-SVN: r275096

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/lto/pr89084_0.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr83246.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr89084.f90 [new file with mode: 0644]

index 60effb3f86e7f0484a449a15dc55f7b2d0467f37..b2b534a709fc2d604bbdc230e3a246ff5d15f31d 100644 (file)
@@ -1,6 +1,14 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/83246
+       PR fortran/89084
+       * trans-decl.c (generate_local_decl): Add referenced FL_PARAMETERs
+       if sym->ns->construct_entities rather than if
+       sym->ns->parent->code->op == EXEC_BLOCK.
+
        2019-01-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/88902
index b266a8efee3a3bf2a8c56772c0b44b4947c06501..73a37ae1275f4f6fd4583ff3df98534f261b1b87 100644 (file)
@@ -5647,10 +5647,7 @@ generate_local_decl (gfc_symbol * sym)
                          "imported at %L", sym->name, &sym->declared_at);
        }
 
-      if (sym->ns
-         && sym->ns->parent
-         && sym->ns->parent->code
-         && sym->ns->parent->code->op == EXEC_BLOCK)
+      if (sym->ns && sym->ns->construct_entities)
        {
          if (sym->attr.referenced)
            gfc_get_symbol_decl (sym);
index b11b037af3f6766f1bdfd0237de87197da016e47..5683a3d5f485c2cb7d9d91a59961e9fadf068b4f 100644 (file)
@@ -3,6 +3,12 @@
        Backported from mainline
        2019-02-01  Jakub Jelinek  <jakub@redhat.com>
 
+       PR fortran/83246
+       PR fortran/89084
+       * gfortran.dg/pr89084.f90: New test.
+       * gfortran.dg/lto/pr89084_0.f90: New test.
+       * gfortran.dg/pr83246.f90: New test.
+
        PR tree-optimization/88107
        * gcc.dg/gomp/pr88107.c: New test.
 
diff --git a/gcc/testsuite/gfortran.dg/lto/pr89084_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr89084_0.f90
new file mode 100644 (file)
index 0000000..2c49749
--- /dev/null
@@ -0,0 +1,24 @@
+! PR fortran/89084
+! { dg-lto-do link }
+! { dg-lto-options {{ -O0 -flto }} }
+
+integer function foo ()
+  write (*,*) 'foo'
+  block
+    integer, parameter :: idxs(3) = (/ 1, 2, 3 /)
+    integer :: i
+    foo = 0
+    do i = 1, size(idxs)
+      foo = foo + idxs(i)
+    enddo
+  end block
+end function foo
+program pr89084
+  integer :: i
+  interface
+    integer function foo ()
+    end function
+  end interface
+  i = foo ()
+  if (i.ne.6) stop 1
+end
diff --git a/gcc/testsuite/gfortran.dg/pr83246.f90 b/gcc/testsuite/gfortran.dg/pr83246.f90
new file mode 100644 (file)
index 0000000..32097e3
--- /dev/null
@@ -0,0 +1,9 @@
+! PR fortran/83246
+! { dg-do link }
+   program dusty_corner 
+   write(*,*)'BLOCK TESTS' 
+   MAKEDATAP: block
+   integer,parameter :: scratch(*)=[1,2,3]
+   write(*,*)scratch
+   endblock MAKEDATAP
+   end program dusty_corner
diff --git a/gcc/testsuite/gfortran.dg/pr89084.f90 b/gcc/testsuite/gfortran.dg/pr89084.f90
new file mode 100644 (file)
index 0000000..3ac6b37
--- /dev/null
@@ -0,0 +1,23 @@
+! PR fortran/89084
+! { dg-do run }
+
+integer function foo ()
+  write (*,*) 'foo'
+  block
+    integer, parameter :: idxs(3) = (/ 1, 2, 3 /)
+    integer :: i
+    foo = 0
+    do i = 1, size(idxs)
+      foo = foo + idxs(i)
+    enddo
+  end block
+end function foo
+program pr89084
+  integer :: i
+  interface
+    integer function foo ()
+    end function
+  end interface
+  i = foo ()
+  if (i.ne.6) stop 1
+end
This page took 0.099595 seconds and 5 git commands to generate.