re PR fortran/80965 (ICE with class argument and -O2 optimization)
authorPaul Thomas <pault@gcc.gnu.org>
Sat, 3 Mar 2018 13:34:10 +0000 (13:34 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sat, 3 Mar 2018 13:34:10 +0000 (13:34 +0000)
2018-03-03  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/80965
* resolve.c (build_loc_call): Change symtree name from 'loc' to
'_loc'.

2018-03-03  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/80965
* gfortran.dg/select_type_41.f90: New test.

From-SVN: r258195

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

index 742b83d096b896c8557611f8ef144cc2b118c2fa..5c99760e4c510194e69ce44142786247e606e1a5 100644 (file)
@@ -1,3 +1,9 @@
+2018-03-03  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/80965
+       * resolve.c (build_loc_call): Change symtree name from 'loc' to
+       '_loc'.
+
 2018-03-01  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/84219
index 6869bce2edb735a078b95a93b9730e7961e7fcc7..6e20184e648f7327ccf488fd1048f8dd7052b3e4 100644 (file)
@@ -8712,7 +8712,7 @@ build_loc_call (gfc_expr *sym_expr)
   gfc_expr *loc_call;
   loc_call = gfc_get_expr ();
   loc_call->expr_type = EXPR_FUNCTION;
-  gfc_get_sym_tree ("loc", gfc_current_ns, &loc_call->symtree, false);
+  gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
   loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
   loc_call->symtree->n.sym->attr.intrinsic = 1;
   loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
index b249f618f6d7eaabbaa042614d11f7e2a6698c90..a867711183bc1f3a66e58f80b5cb22b2cedf879a 100644 (file)
@@ -1,3 +1,8 @@
+2018-03-03  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/80965
+       * gfortran.dg/select_type_41.f90: New test.
+
 2018-03-02  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/61135
diff --git a/gcc/testsuite/gfortran.dg/select_type_41.f90 b/gcc/testsuite/gfortran.dg/select_type_41.f90
new file mode 100644 (file)
index 0000000..eebb879
--- /dev/null
@@ -0,0 +1,30 @@
+! { dg-do compile }
+! { dg-options "-O2" }
+!
+! Tests the fix for PR80965 in which the use of the name 'loc'
+! for the dummy argument of 'xyz' caused an ICE. If the module
+! was used, the error "DUMMY attribute conflicts with INTRINSIC
+! attribute in ‘loc’ at (1)" was emitted. Note that although 'loc'
+! is a GNU extension and so can be over-ridden, this is not very
+! good practice.
+!
+! Contributed by David Sagan  <david.sagan@gmail.com>
+!
+module mode3_mod
+contains
+  subroutine xyz (loc)
+    implicit none
+    class(*) :: loc
+    real x(6)
+    integer ix_use
+    select type (loc)
+      type is (integer)
+        x = 0
+        print *, "integer"
+      type is (real)
+        ix_use = 0
+        print *, "real"
+    end select
+  end subroutine xyz
+end module mode3_mod
+