aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-decl.c
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-11-10 10:31:33 +0100
committerTobias Burnus <tobias@codesourcery.com>2020-11-10 10:31:33 +0100
commit2d59593105d3b1e38e49f96b74fd81e4e5038c7f (patch)
tree85d8bed022301a62f158bfc62c4f954a96b1aba6 /gcc/fortran/trans-decl.c
parent2686de5617bfb572343933be2883e8274c9735b5 (diff)
downloadgcc-2d59593105d3b1e38e49f96b74fd81e4e5038c7f.zip
gcc-2d59593105d3b1e38e49f96b74fd81e4e5038c7f.tar.gz
gcc-2d59593105d3b1e38e49f96b74fd81e4e5038c7f.tar.bz2
Fortran: Fix function decl's location [PR95847]
gcc/fortran/ChangeLog: PR fortran/95847 * trans-decl.c (gfc_get_symbol_decl): Do not (re)set the location of an external procedure. (build_entry_thunks, generate_coarray_init, create_main_function, gfc_generate_function_code): Use fndecl's location in BIND_EXPR. gcc/testsuite/ChangeLog: PR fortran/95847 * gfortran.dg/coverage.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-decl.c')
-rw-r--r--gcc/fortran/trans-decl.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index cdef753..71d5c67 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1749,7 +1749,6 @@ gfc_get_symbol_decl (gfc_symbol * sym)
|| sym->attr.if_source != IFSRC_DECL)
{
decl = gfc_get_extern_function_decl (sym);
- gfc_set_decl_location (decl, &sym->declared_at);
}
else
{
@@ -3021,8 +3020,9 @@ build_entry_thunks (gfc_namespace * ns, bool global)
poplevel (1, 1);
BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl;
DECL_SAVED_TREE (thunk_fndecl)
- = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl),
- DECL_INITIAL (thunk_fndecl));
+ = fold_build3_loc (DECL_SOURCE_LOCATION (thunk_fndecl), BIND_EXPR,
+ void_type_node, tmp, DECL_SAVED_TREE (thunk_fndecl),
+ DECL_INITIAL (thunk_fndecl));
/* Output the GENERIC tree. */
dump_function (TDI_original, thunk_fndecl);
@@ -5786,8 +5786,8 @@ generate_coarray_init (gfc_namespace * ns __attribute((unused)))
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
DECL_SAVED_TREE (fndecl)
- = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl),
- DECL_INITIAL (fndecl));
+ = fold_build3_loc (DECL_SOURCE_LOCATION (fndecl), BIND_EXPR, void_type_node,
+ decl, DECL_SAVED_TREE (fndecl), DECL_INITIAL (fndecl));
dump_function (TDI_original, fndecl);
cfun->function_end_locus = input_location;
@@ -6512,8 +6512,9 @@ create_main_function (tree fndecl)
BLOCK_SUPERCONTEXT (DECL_INITIAL (ftn_main)) = ftn_main;
DECL_SAVED_TREE (ftn_main)
- = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (ftn_main),
- DECL_INITIAL (ftn_main));
+ = fold_build3_loc (DECL_SOURCE_LOCATION (ftn_main), BIND_EXPR,
+ void_type_node, decl, DECL_SAVED_TREE (ftn_main),
+ DECL_INITIAL (ftn_main));
/* Output the GENERIC tree. */
dump_function (TDI_original, ftn_main);
@@ -7004,8 +7005,8 @@ gfc_generate_function_code (gfc_namespace * ns)
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
DECL_SAVED_TREE (fndecl)
- = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl),
- DECL_INITIAL (fndecl));
+ = fold_build3_loc (DECL_SOURCE_LOCATION (fndecl), BIND_EXPR, void_type_node,
+ decl, DECL_SAVED_TREE (fndecl), DECL_INITIAL (fndecl));
/* Output the GENERIC tree. */
dump_function (TDI_original, fndecl);