re PR fortran/61765 ([F03] Rejects valid BIND(C) ENTRY)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 13 Jan 2019 04:02:46 +0000 (04:02 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 13 Jan 2019 04:02:46 +0000 (04:02 +0000)
2019-01-12  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/61765
* resolve.c (gfc_verify_binding_labels): Break if-elseif-elseif
structure into independent if's with a return to simplify logic.
Avoid a check for ENTRY name with bind(c).

2019-01-12  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/61765
* gfortran.dg/pr61765.f90: New test.

From-SVN: r267902

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

index a34fbd8a1fbfd0fddd665aec052e6fbddd0219f2..50db133fa39e4666c8ff33a7c1c59a43302cd81c 100644 (file)
@@ -1,3 +1,10 @@
+2019-01-12  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/61765
+       * resolve.c (gfc_verify_binding_labels): Break if-elseif-elseif
+       structure into independent if's with a return to simplify logic.
+       Avoid a check for ENTRY name with bind(c).
+
 2019-01-12  Paul Thomas  <pault@gcc.gnu.org>
 
        * gfortran.texi : Add description in sections on TS 29113 and
index d18f2d8aefacff327902e5611ff5a99ac50cb523..155e7c921cf2135ba5134448340764cd007b7f2e 100644 (file)
@@ -11789,11 +11789,12 @@ gfc_verify_binding_labels (gfc_symbol *sym)
                 sym->binding_label, &sym->declared_at, &gsym->where);
       /* Clear the binding label to prevent checking multiple times.  */
       sym->binding_label = NULL;
-
+      return;
     }
-  else if (sym->attr.flavor == FL_VARIABLE && module
-          && (strcmp (module, gsym->mod_name) != 0
-              || strcmp (sym->name, gsym->sym_name) != 0))
+
+  if (sym->attr.flavor == FL_VARIABLE && module
+      && (strcmp (module, gsym->mod_name) != 0
+         || strcmp (sym->name, gsym->sym_name) != 0))
     {
       /* This can only happen if the variable is defined in a module - if it
         isn't the same module, reject it.  */
@@ -11802,14 +11803,16 @@ gfc_verify_binding_labels (gfc_symbol *sym)
                 sym->name, module, sym->binding_label,
                 &sym->declared_at, &gsym->where, gsym->mod_name);
       sym->binding_label = NULL;
+      return;
     }
-  else if ((sym->attr.function || sym->attr.subroutine)
-          && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
-              || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
-          && sym != gsym->ns->proc_name
-          && (module != gsym->mod_name
-              || strcmp (gsym->sym_name, sym->name) != 0
-              || (module && strcmp (module, gsym->mod_name) != 0)))
+
+  if ((sym->attr.function || sym->attr.subroutine)
+      && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
+          || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
+      && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
+      && (module != gsym->mod_name
+         || strcmp (gsym->sym_name, sym->name) != 0
+         || (module && strcmp (module, gsym->mod_name) != 0)))
     {
       /* Print an error if the procedure is defined multiple times; we have to
         exclude references to the same procedure via module association or
index 6f781aed62ef2315df275236fb250c372645ee70..0398fb8287401dea358b7fb867d12a0f839eb029 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-12  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/61765
+       * gfortran.dg/pr61765.f90: New test.
+
 2019-01-12  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * g++.dg/cpp0x/pr62101.C: Test locations too.
diff --git a/gcc/testsuite/gfortran.dg/pr61765.f90 b/gcc/testsuite/gfortran.dg/pr61765.f90
new file mode 100644 (file)
index 0000000..080d1ac
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+   subroutine sub1(x)
+     integer, intent(in) :: x
+     entry sub1_c(x) bind(c)
+   end subroutine sub1
+
+   subroutine sub2_c(x) bind(c)
+     integer, intent(in) :: x
+     entry sub2(x)
+   end subroutine sub2_c
+
+   subroutine sub3_c(x) bind(c)
+     integer, intent(in) :: x
+     entry sub3_c_c(x) bind(c)
+   end subroutine sub3_c