re PR fortran/47260 (DLLEXPORT: TREE_PUBLIC for procedures lost between trans-decl.c and tree.c)
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. Co-Authored-By: Tobias Burnus <burnus@net-b.de> From-SVN: r168757
This commit is contained in:
parent
29a63d6779
commit
384f586a53
2 changed files with 23 additions and 15 deletions
|
@ -1,3 +1,11 @@
|
|||
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.
|
||||
|
||||
2011-01-13 Tobias Burnus <burnus@net-b.de>
|
||||
Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue