summaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-decl.c
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-13 18:04:03 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-13 18:04:03 +0000
commite27454ee94033de0fc53769552dac474fab0bec1 (patch)
tree36f23ba5202fa094f4212c3cf0769e20dc440066 /gcc/fortran/trans-decl.c
parent030b7e6d789bf2dfd46ad6084b10944eab8aebff (diff)
downloadgcc-e27454ee94033de0fc53769552dac474fab0bec1.tar.gz
2011-01-13 Kai Tietz <kai.tietz@onevision.com>
Tobias Burnus <burnus@net-b.de> PR fortran/47260 * trans-decl.c (gfc_get_extern_function_decl, build_function_decl): Set TREE_PUBLIC/TREE_EXTERNAL before calling decl_attributes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168757 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-decl.c')
-rw-r--r--gcc/fortran/trans-decl.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 829548c646e..254db76b0c5 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1575,6 +1575,12 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
fndecl = build_decl (input_location,
FUNCTION_DECL, name, type);
+ /* Initialize DECL_EXTERNAL and TREE_PUBLIC before calling decl_attributes;
+ TREE_PUBLIC specifies whether a function is globally addressable (i.e.
+ the the opposite of declaring a function as static in C). */
+ DECL_EXTERNAL (fndecl) = 1;
+ TREE_PUBLIC (fndecl) = 1;
+
attributes = add_attributes_to_decl (sym->attr, NULL_TREE);
decl_attributes (&fndecl, attributes, 0);
@@ -1592,12 +1598,6 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
DECL_CONTEXT (fndecl) = NULL_TREE;
}
- DECL_EXTERNAL (fndecl) = 1;
-
- /* This specifies if a function is globally addressable, i.e. it is
- the opposite of declaring static in C. */
- TREE_PUBLIC (fndecl) = 1;
-
/* Set attributes for PURE functions. A call to PURE function in the
Fortran 95 sense is both pure and without side effects in the C
sense. */
@@ -1658,6 +1658,15 @@ build_function_decl (gfc_symbol * sym, bool global)
attr = sym->attr;
+ /* Initialize DECL_EXTERNAL and TREE_PUBLIC before calling decl_attributes;
+ TREE_PUBLIC specifies whether a function is globally addressable (i.e.
+ the the opposite of declaring a function as static in C). */
+ DECL_EXTERNAL (fndecl) = 0;
+
+ if (!current_function_decl
+ && !sym->attr.entry_master && !sym->attr.is_main_program)
+ TREE_PUBLIC (fndecl) = 1;
+
attributes = add_attributes_to_decl (attr, NULL_TREE);
decl_attributes (&fndecl, attributes, 0);
@@ -1707,15 +1716,6 @@ build_function_decl (gfc_symbol * sym, bool global)
/* Don't call layout_decl for a RESULT_DECL.
layout_decl (result_decl, 0); */
- /* Set up all attributes for the function. */
- DECL_EXTERNAL (fndecl) = 0;
-
- /* This specifies if a function is globally visible, i.e. it is
- the opposite of declaring static in C. */
- if (!current_function_decl
- && !sym->attr.entry_master && !sym->attr.is_main_program)
- TREE_PUBLIC (fndecl) = 1;
-
/* TREE_STATIC means the function body is defined here. */
TREE_STATIC (fndecl) = 1;