diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-13 18:04:03 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-13 18:04:03 +0000 |
commit | e27454ee94033de0fc53769552dac474fab0bec1 (patch) | |
tree | 36f23ba5202fa094f4212c3cf0769e20dc440066 /gcc/fortran/trans-decl.c | |
parent | 030b7e6d789bf2dfd46ad6084b10944eab8aebff (diff) | |
download | gcc-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.c | 30 |
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; |