[multiple changes]
authorPaul Thomas <pault@gcc.gnu.org>
Fri, 20 Nov 2015 14:50:35 +0000 (14:50 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Fri, 20 Nov 2015 14:50:35 +0000 (14:50 +0000)
2015-11-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/68237
* decl.c (gfc_match_submod_proc): Test the interface symbol
before accessing its attributes.

2015-11-20  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66762
(gfc_get_symbol_decl): Test for attr.used_in_submodule as well
as attr.use_assoc (twice).
(gfc_create_module_variable): Ditto.

2015-11-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/68237
* gfortran.dg/submodule_12.f90: New test

PR fortran/66762
* gfortran.dg/submodule_6.f90: Add compile option -flto.

From-SVN: r230661

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/submodule_12.f08 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/submodule_6.f08

index 3bd9743..1c38f95 100644 (file)
@@ -1,3 +1,16 @@
+2015-11-20  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/68237
+       * decl.c (gfc_match_submod_proc): Test the interface symbol
+       before accessing its attributes.
+
+2015-11-20  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66762
+       (gfc_get_symbol_decl): Test for attr.used_in_submodule as well
+       as attr.use_assoc (twice).
+       (gfc_create_module_variable): Ditto.
+
 2015-11-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/59910
@@ -7,7 +20,7 @@
 2015-11-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/43996
-       * simplify.c (gfc_simplify_spread): Issue error for too large array 
+       * simplify.c (gfc_simplify_spread): Issue error for too large array
        constructor in a PARAMETER statement.
 
 2015-11-17  Steven G. Kargl  <kargl@gcc.gnu.org>
index 6d76a7f..c4ce18b 100644 (file)
@@ -7666,7 +7666,7 @@ gfc_match_submod_proc (void)
 
   /* Make sure that the result field is appropriately filled, even though
      the result symbol will be replaced later on.  */
-  if (sym->ts.interface->attr.function)
+  if (sym->ts.interface && sym->ts.interface->attr.function)
     {
       if (sym->ts.interface->result
          && sym->ts.interface->result != sym->ts.interface)
index 7e05e67..0e5eecc 100644 (file)
@@ -1497,7 +1497,7 @@ gfc_get_symbol_decl (gfc_symbol * sym)
      declaration.  */
   if ((sym->attr.flavor == FL_VARIABLE
        || sym->attr.flavor == FL_PARAMETER)
-      && sym->attr.use_assoc
+      && (sym->attr.use_assoc || sym->attr.used_in_submodule)
       && !intrinsic_array_parameter
       && sym->module
       && gfc_get_module_backend_decl (sym))
@@ -4499,7 +4499,7 @@ gfc_create_module_variable (gfc_symbol * sym)
       decl = sym->backend_decl;
       gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE);
 
-      if (!sym->attr.use_assoc)
+      if (!sym->attr.use_assoc && !sym->attr.used_in_submodule)
        {
          gcc_assert (TYPE_CONTEXT (decl) == NULL_TREE
                      || TYPE_CONTEXT (decl) == sym->ns->proc_name->backend_decl);
@@ -4531,7 +4531,8 @@ gfc_create_module_variable (gfc_symbol * sym)
 
   /* Don't generate variables from other modules. Variables from
      COMMONs and Cray pointees will already have been generated.  */
-  if (sym->attr.use_assoc || sym->attr.in_common || sym->attr.cray_pointee)
+  if (sym->attr.use_assoc || sym->attr.used_in_submodule
+      || sym->attr.in_common || sym->attr.cray_pointee)
     return;
 
   /* Equivalenced variables arrive here after creation.  */
index 1b74a99..b6810c8 100644 (file)
@@ -1,3 +1,11 @@
+2015-11-20  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/68237
+       * gfortran.dg/submodule_12.f90: New test
+
+       PR fortran/66762
+       * gfortran.dg/submodule_6.f90: Add compile option -flto.
+
 2015-11-20  Andre Vieira  <andre.simoesdiasvieira@arm.com>
 
        * lib/target-supports.exp
diff --git a/gcc/testsuite/gfortran.dg/submodule_12.f08 b/gcc/testsuite/gfortran.dg/submodule_12.f08
new file mode 100644 (file)
index 0000000..6fba4bf
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! Test the fix for PR68237 in which 'foo' caused a seg fault rather than an error.
+!
+! Contributed by Martin Reinecke  <martin@mpa-garching.mpg.de>
+!
+module m1
+  interface
+    module subroutine bar
+    end subroutine
+  end interface
+end module m1
+
+submodule (m1) m2
+contains
+  module procedure foo ! { dg-error "must be in a generic module interface" }
+  end procedure ! { dg-error "Expecting END SUBMODULE statement" }
+end submodule
index e0b195e..b453b54 100644 (file)
@@ -1,6 +1,9 @@
 ! { dg-do run }
+! { dg-options "-flto" }
 !
-! Checks that the results of module procedures have the correct characteristics.
+! Checks that the results of module procedures have the correct characteristics
+! and that submodules use the module version of vtables (PR66762). This latter
+! requires the -flto compile option.
 !
 ! Contributed by Reinhold Bader  <reinhold.bader@lrz.de>
 !