aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2017-08-11 17:45:36 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2017-08-11 17:45:36 +0000
commitc4fa898440e0b5eb540253e67c7ada61af0d52a2 (patch)
tree9b9933505e7211399953b43071d776a252681b8e /gcc/fortran
parent0a29142da68c793fefacf83e579b11902c9e9602 (diff)
downloadgcc-c4fa898440e0b5eb540253e67c7ada61af0d52a2.zip
gcc-c4fa898440e0b5eb540253e67c7ada61af0d52a2.tar.gz
gcc-c4fa898440e0b5eb540253e67c7ada61af0d52a2.tar.bz2
re PR fortran/60355 ([F08] constraint C519 for BIND attribute not enforced)
2017-08-11 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/60355 * resolve.c (resolve_symbol): Adjust (and reformat) comment. Perform check if a BIND(C) is declared at module level regardless of whether it is typed implicitly or not. 2017-08-11 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/60355 * gfortran.dg (bind_c_usage_30): New test. From-SVN: r251054
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/resolve.c27
2 files changed, 22 insertions, 13 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 50f2f04..5c4ad74 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2017-08-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/60355
+ * resolve.c (resolve_symbol): Adjust (and reformat)
+ comment. Perform check if a BIND(C) is declared
+ at module level regardless of whether it is typed
+ implicitly or not.
+
2017-08-10 Fritz Reese <fritzoreese@gmail.com>
* options.c (set_dec_flags): Only set legacy standards when value
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 5caf767..30928a2 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -14397,17 +14397,18 @@ resolve_symbol (gfc_symbol *sym)
}
}
- /* If the symbol is marked as bind(c), verify it's type and kind. Do not
- do this for something that was implicitly typed because that is handled
- in gfc_set_default_type. Handle dummy arguments and procedure
- definitions separately. Also, anything that is use associated is not
- handled here but instead is handled in the module it is declared in.
- Finally, derived type definitions are allowed to be BIND(C) since that
- only implies that they're interoperable, and they are checked fully for
- interoperability when a variable is declared of that type. */
- if (sym->attr.is_bind_c && sym->attr.implicit_type == 0 &&
- sym->attr.use_assoc == 0 && sym->attr.dummy == 0 &&
- sym->attr.flavor != FL_PROCEDURE && sym->attr.flavor != FL_DERIVED)
+ /* If the symbol is marked as bind(c), that it is declared at module level
+ scope and verify its type and kind. Do not do the latter for symbols
+ that are implicitly typed because that is handled in
+ gfc_set_default_type. Handle dummy arguments and procedure definitions
+ separately. Also, anything that is use associated is not handled here
+ but instead is handled in the module it is declared in. Finally, derived
+ type definitions are allowed to be BIND(C) since that only implies that
+ they're interoperable, and they are checked fully for interoperability
+ when a variable is declared of that type. */
+ if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
+ && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
+ && sym->attr.flavor != FL_DERIVED)
{
bool t = true;
@@ -14421,11 +14422,11 @@ resolve_symbol (gfc_symbol *sym)
"module level scope", sym->name, &(sym->declared_at));
t = false;
}
- else if (sym->common_head != NULL)
+ else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
{
t = verify_com_block_vars_c_interop (sym->common_head);
}
- else
+ else if (sym->attr.implicit_type == 0)
{
/* If type() declaration, we need to verify that the components
of the given type are all C interoperable, etc. */