re PR fortran/83021 (gfortran segfault in polymorphic assignment)
authorPaul Thomas <pault@gcc.gnu.org>
Tue, 28 Nov 2017 15:13:42 +0000 (15:13 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Tue, 28 Nov 2017 15:13:42 +0000 (15:13 +0000)
2017-11-28  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83021
* resolve.c (resolve_component): Only escape for use assciated
vtypes if the current namespace has no proc_name and is most
particularly block data.

From-SVN: r255202

gcc/fortran/ChangeLog
gcc/fortran/resolve.c

index 7ba781447f9cb80b469507e52657fde4e7251a83..91c57e0d43dc921be6b45e8998d2ea9a5a8aa60a 100644 (file)
@@ -1,3 +1,10 @@
+2017-11-28  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/83021
+       * resolve.c (resolve_component): Only escape for use assciated
+       vtypes if the current namespace has no proc_name and is most
+       particularly block data.
+
 2017-11-28  Jakub Jelinek  <jakub@redhat.com>
 
        * trans-decl.c (gfc_trans_entry_master_switch): Build SWITCH_EXPR
index 9a814017c36237da2e099750d30ef31aa6a4b1b5..fe2f43a1e577ba6bbbbed37f28ba504185e277ea 100644 (file)
@@ -13502,7 +13502,11 @@ resolve_component (gfc_component *c, gfc_symbol *sym)
   if (c->attr.artificial)
     return true;
 
-  if (sym->attr.vtype && sym->attr.use_assoc)
+  /* Do not allow vtype components to be resolved in nameless namespaces
+     such as block data because the procedure pointers will cause ICEs
+     and vtables are not needed in these contexts.  */
+  if (sym->attr.vtype && sym->attr.use_assoc
+      && sym->ns->proc_name == NULL)
     return true;
 
   /* F2008, C442.  */