Commit 5bd91632 by Mark Mitchell Committed by Mark Mitchell

decl2.c (determine_visibility): Allow class visibility directives to override…

decl2.c (determine_visibility): Allow class visibility directives to override targetm.cxx.export_class_data.

	* decl2.c (determine_visibility): Allow class visibility
	directives to override targetm.cxx.export_class_data.

[[Split portion of a mixed commit.]]

From-SVN: r87735.2
parent 6775f1f3
2004-09-19 Mark Mitchell <mark@codesourcery.com>
* decl2.c (determine_visibility): Allow class visibility
directives to override targetm.cxx.export_class_data.
2004-09-18 Kazu Hirata <kazu@cs.umass.edu> 2004-09-18 Kazu Hirata <kazu@cs.umass.edu>
* call.c, semantics.c: Follow spelling conventions. * call.c, semantics.c: Follow spelling conventions.
......
...@@ -1655,18 +1655,8 @@ determine_visibility (tree decl) ...@@ -1655,18 +1655,8 @@ determine_visibility (tree decl)
the visibility of their containing class. */ the visibility of their containing class. */
if (class_type) if (class_type)
{ {
if (TREE_CODE (decl) == VAR_DECL if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
&& targetm.cxx.export_class_data () && lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type)))
&& (DECL_TINFO_P (decl)
|| (DECL_VTABLE_OR_VTT_P (decl)
/* Construction virtual tables are not emitted
because they cannot be referred to from other
object files; their name is not standardized by
the ABI. */
&& !DECL_CONSTRUCTION_VTABLE_P (decl))))
DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
&& lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type)))
{ {
DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
DECL_VISIBILITY_SPECIFIED (decl) = 1; DECL_VISIBILITY_SPECIFIED (decl) = 1;
...@@ -1678,11 +1668,28 @@ determine_visibility (tree decl) ...@@ -1678,11 +1668,28 @@ determine_visibility (tree decl)
DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN; DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
DECL_VISIBILITY_SPECIFIED (decl) = 1; DECL_VISIBILITY_SPECIFIED (decl) = 1;
} }
else if (CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
{
DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
DECL_VISIBILITY_SPECIFIED (decl) = 1;
}
/* If no explicit visibility information has been provided for
this class, some targets require that class data be
exported. */
else if (TREE_CODE (decl) == VAR_DECL
&& targetm.cxx.export_class_data ()
&& (DECL_TINFO_P (decl)
|| (DECL_VTABLE_OR_VTT_P (decl)
/* Construction virtual tables are not emitted
because they cannot be referred to from other
object files; their name is not standardized by
the ABI. */
&& !DECL_CONSTRUCTION_VTABLE_P (decl))))
DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
else else
{ {
DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type); DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
DECL_VISIBILITY_SPECIFIED (decl) DECL_VISIBILITY_SPECIFIED (decl) = 0;
= CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
} }
} }
} }
......
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