aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraphunit.c
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2010-11-25 12:30:07 +0000
committerKai Tietz <ktietz@gcc.gnu.org>2010-11-25 13:30:07 +0100
commit9d602c5900c50a7cda00695c00e1945badc184cf (patch)
tree53c658f06750cdef237c8cdb0035bc208fccf85b /gcc/cgraphunit.c
parentc8230704c44609131a832307f2eee04df3206eb8 (diff)
downloadgcc-9d602c5900c50a7cda00695c00e1945badc184cf.zip
gcc-9d602c5900c50a7cda00695c00e1945badc184cf.tar.gz
gcc-9d602c5900c50a7cda00695c00e1945badc184cf.tar.bz2
cgraphunit.c (process_function_and_variable_attributes): Mark dllexport-ed function/variables as needed.
2010-11-25 Kai Tietz <kai.tietz@onevision.com> * cgraphunit.c (process_function_and_variable_attributes): Mark dllexport-ed function/variables as needed. * ipa.c (cgraph_externally_visible_p): Make dllexport-ed as externally visible. 2010-11-25 Kai Tietz <kai.tietz@onevision.com> * gcc.dg/dll-8.c: New. From-SVN: r167144
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r--gcc/cgraphunit.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index dd7c0fb..c7c5665 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -816,7 +816,14 @@ process_function_and_variable_attributes (struct cgraph_node *first,
tree decl = node->decl;
if (DECL_PRESERVE_P (decl))
cgraph_mark_needed_node (node);
- if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
+ if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl))
+ && TREE_PUBLIC (node->decl))
+ {
+ if (node->local.finalized)
+ cgraph_mark_needed_node (node);
+ }
+ else if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
{
if (! TREE_PUBLIC (node->decl))
warning_at (DECL_SOURCE_LOCATION (node->decl), OPT_Wattributes,
@@ -835,7 +842,14 @@ process_function_and_variable_attributes (struct cgraph_node *first,
if (vnode->finalized)
varpool_mark_needed_node (vnode);
}
- if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
+ if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl))
+ && TREE_PUBLIC (node->decl))
+ {
+ if (vnode->finalized)
+ varpool_mark_needed_node (vnode);
+ }
+ else if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
{
if (! TREE_PUBLIC (vnode->decl))
warning_at (DECL_SOURCE_LOCATION (vnode->decl), OPT_Wattributes,