diff options
author | Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> | 2019-11-11 14:26:04 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> | 2019-11-11 14:26:04 +0000 |
commit | 6b8333eee4894cd05a01eed915e7ce145c94cdbb (patch) | |
tree | 4c1ce6e6e07421219a8b99a436c5e41652ac4f5e /gcc/fortran/interface.c | |
parent | 60bd0712ac1887e92852119bb587fafc4e65495e (diff) |
Merge branches/gcc-7-branch rev 278029.
Change-Id: I1c5b8ebdaf520c43fc5b4b006b68c66fedd1c3c2
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r-- | gcc/fortran/interface.c | 10 |
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) |