aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/interface.c
diff options
context:
space:
mode:
authorMaxim Kuvyrkov <maxim.kuvyrkov@linaro.org>2019-11-11 14:26:04 +0000
committerMaxim Kuvyrkov <maxim.kuvyrkov@linaro.org>2019-11-11 14:26:04 +0000
commit6b8333eee4894cd05a01eed915e7ce145c94cdbb (patch)
tree4c1ce6e6e07421219a8b99a436c5e41652ac4f5e /gcc/fortran/interface.c
parent60bd0712ac1887e92852119bb587fafc4e65495e (diff)
Merge branches/gcc-7-branch rev 278029.
Change-Id: I1c5b8ebdaf520c43fc5b4b006b68c66fedd1c3c2
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r--gcc/fortran/interface.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 5b7c56dc14c..6b7fbcc3275 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -691,6 +691,15 @@ gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
if (ts1->type == BT_VOID || ts2->type == BT_VOID)
return true;
+ /* Special case for our C interop types. There should be a better
+ way of doing this... */
+
+ if (((ts1->type == BT_INTEGER && ts2->type == BT_DERIVED)
+ || (ts1->type == BT_DERIVED && ts2->type == BT_INTEGER))
+ && ts1->u.derived && ts2->u.derived
+ && ts1->u.derived == ts2->u.derived)
+ return true;
+
/* The _data component is not always present, therefore check for its
presence before assuming, that its derived->attr is available.
When the _data component is not present, then nevertheless the
@@ -3576,6 +3585,7 @@ gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
gfc_warning (OPT_Wimplicit_procedure,
"Procedure %qs called at %L is not explicitly declared",
sym->name, where);
+ gfc_find_proc_namespace (sym->ns)->implicit_interface_calls = 1;
}
if (sym->attr.if_source == IFSRC_UNKNOWN)