Commit 384f586a by Kai Tietz Committed by Tobias Burnus

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
parent 29a63d67
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> 2011-01-13 Tobias Burnus <burnus@net-b.de>
Mikael Morin <mikael@gcc.gnu.org> Mikael Morin <mikael@gcc.gnu.org>
......
...@@ -1575,6 +1575,12 @@ gfc_get_extern_function_decl (gfc_symbol * sym) ...@@ -1575,6 +1575,12 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
fndecl = build_decl (input_location, fndecl = build_decl (input_location,
FUNCTION_DECL, name, type); 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); attributes = add_attributes_to_decl (sym->attr, NULL_TREE);
decl_attributes (&fndecl, attributes, 0); decl_attributes (&fndecl, attributes, 0);
...@@ -1592,12 +1598,6 @@ gfc_get_extern_function_decl (gfc_symbol * sym) ...@@ -1592,12 +1598,6 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
DECL_CONTEXT (fndecl) = NULL_TREE; 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 /* 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 Fortran 95 sense is both pure and without side effects in the C
sense. */ sense. */
...@@ -1658,6 +1658,15 @@ build_function_decl (gfc_symbol * sym, bool global) ...@@ -1658,6 +1658,15 @@ build_function_decl (gfc_symbol * sym, bool global)
attr = sym->attr; 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); attributes = add_attributes_to_decl (attr, NULL_TREE);
decl_attributes (&fndecl, attributes, 0); decl_attributes (&fndecl, attributes, 0);
...@@ -1707,15 +1716,6 @@ build_function_decl (gfc_symbol * sym, bool global) ...@@ -1707,15 +1716,6 @@ build_function_decl (gfc_symbol * sym, bool global)
/* Don't call layout_decl for a RESULT_DECL. /* Don't call layout_decl for a RESULT_DECL.
layout_decl (result_decl, 0); */ 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 means the function body is defined here. */
TREE_STATIC (fndecl) = 1; TREE_STATIC (fndecl) = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment