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
This commit is contained in:
Mark Mitchell 2004-09-19 23:18:19 +00:00 committed by Mark Mitchell
parent 6775f1f3a7
commit 5bd916325a
2 changed files with 26 additions and 14 deletions

View file

@ -1,3 +1,8 @@
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>
* call.c, semantics.c: Follow spelling conventions.

View file

@ -1655,18 +1655,8 @@ determine_visibility (tree decl)
the visibility of their containing class. */
if (class_type)
{
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 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
&& lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type)))
if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
&& lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type)))
{
DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
DECL_VISIBILITY_SPECIFIED (decl) = 1;
@ -1678,11 +1668,28 @@ determine_visibility (tree decl)
DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
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
{
DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
DECL_VISIBILITY_SPECIFIED (decl)
= CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
DECL_VISIBILITY_SPECIFIED (decl) = 0;
}
}
}