decl2.c (determine_visibility): Allow target to override visibility of class data.
gcc/cp/ * decl2.c (determine_visibility): Allow target to override visibility of class data. gcc/ * config/arm/arm.c (arm_cxx_determine_class_data_visibility): Make no-op for targets which don't use DLLs. gcc/testsuite/ * g++.dg/ext/visibility/arm3.C: Add explanatory text. Skip on non-DLL targets. * g++.dg/ext/visibility/arm1.C: Skip on non-DLL targets. Co-Authored-By: Mark Mitchell <mark@codesourcery.com> From-SVN: r137922
This commit is contained in:
parent
0eae6babe5
commit
711b299844
|
@ -1,3 +1,8 @@
|
||||||
|
2008-07-17 Julian Brown <julian@codesourcery.com>
|
||||||
|
|
||||||
|
* config/arm/arm.c (arm_cxx_determine_class_data_visibility): Make
|
||||||
|
no-op for targets which don't use DLLs.
|
||||||
|
|
||||||
2008-07-17 Martin Jambor <mjambor@suse.cz>
|
2008-07-17 Martin Jambor <mjambor@suse.cz>
|
||||||
|
|
||||||
* ipa-cp.c (ipcp_print_all_lattices): New variable info, check
|
* ipa-cp.c (ipcp_print_all_lattices): New variable info, check
|
||||||
|
|
|
@ -18318,7 +18318,8 @@ arm_cxx_key_method_may_be_inline (void)
|
||||||
static void
|
static void
|
||||||
arm_cxx_determine_class_data_visibility (tree decl)
|
arm_cxx_determine_class_data_visibility (tree decl)
|
||||||
{
|
{
|
||||||
if (!TARGET_AAPCS_BASED)
|
if (!TARGET_AAPCS_BASED
|
||||||
|
|| !TARGET_DLLIMPORT_DECL_ATTRIBUTES)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* In general, \S 3.2.5.5 of the ARM EABI requires that class data
|
/* In general, \S 3.2.5.5 of the ARM EABI requires that class data
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2008-07-17 Julian Brown <julian@codesourcery.com>
|
||||||
|
Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* decl2.c (determine_visibility): Allow target to override
|
||||||
|
visibility of class data.
|
||||||
|
|
||||||
2008-07-17 Paolo Carlini <paolo.carlini@oracle.com>
|
2008-07-17 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/36855
|
PR c++/36855
|
||||||
|
|
|
@ -1963,6 +1963,14 @@ determine_visibility (tree decl)
|
||||||
/* tinfo visibility is based on the type it's for. */
|
/* tinfo visibility is based on the type it's for. */
|
||||||
constrain_visibility
|
constrain_visibility
|
||||||
(decl, type_visibility (TREE_TYPE (DECL_NAME (decl))));
|
(decl, type_visibility (TREE_TYPE (DECL_NAME (decl))));
|
||||||
|
|
||||||
|
/* Give the target a chance to override the visibility associated
|
||||||
|
with DECL. */
|
||||||
|
if (TREE_PUBLIC (decl)
|
||||||
|
&& !DECL_REALLY_EXTERN (decl)
|
||||||
|
&& CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
|
||||||
|
&& !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
|
||||||
|
targetm.cxx.determine_class_data_visibility (decl);
|
||||||
}
|
}
|
||||||
else if (use_template)
|
else if (use_template)
|
||||||
/* Template instantiations and specializations get visibility based
|
/* Template instantiations and specializations get visibility based
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2008-07-17 Julian Brown <julian@codesourcery.com>
|
||||||
|
Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* g++.dg/ext/visibility/arm3.C: Add explanatory text. Skip on
|
||||||
|
non-DLL targets.
|
||||||
|
* g++.dg/ext/visibility/arm1.C: Skip on non-DLL targets.
|
||||||
|
|
||||||
2008-07-17 Paolo Carlini <paolo.carlini@oracle.com>
|
2008-07-17 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/36855
|
PR c++/36855
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } }
|
// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } }
|
||||||
|
// { dg-require-dll "" }
|
||||||
// { dg-options "-fvisibility=hidden" }
|
// { dg-options "-fvisibility=hidden" }
|
||||||
// Most class data should be exported.
|
// Most class data should be exported.
|
||||||
// { dg-final { scan-not-hidden "_ZTV1S" } }
|
// { dg-final { scan-not-hidden "_ZTV1S" } }
|
||||||
|
|
|
@ -1,6 +1,30 @@
|
||||||
// { dg-do compile { target arm*-*-*eabi* } }
|
// { dg-do compile { target arm*-*-*eabi* } }
|
||||||
|
// { dg-require-dll "" }
|
||||||
// { dg-options "-fvisibility=hidden" }
|
// { dg-options "-fvisibility=hidden" }
|
||||||
// Class data should be exported.
|
|
||||||
|
/* From ARM C++ ABI \S 3.2.5.5:
|
||||||
|
|
||||||
|
A class should be exported unless explicitly tagged otherwise.
|
||||||
|
|
||||||
|
This admonition applies even on DLL-based systems where hidden
|
||||||
|
visibility is the default. We want -fvisibility=hidden to behave
|
||||||
|
identically to the situation where hidden visibility is the
|
||||||
|
hard-wired default. So, both A and B are exported classes.
|
||||||
|
|
||||||
|
Furthermore:
|
||||||
|
|
||||||
|
If CAG symbol Y names one of the impedimenta associated with an
|
||||||
|
exported class X:
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
* Otherwise, if X has no key function:
|
||||||
|
|
||||||
|
- Y is exported from ... each DLL that refers to X and uses Y.
|
||||||
|
|
||||||
|
So, the type-info and virtual-table symbols associated with A and B
|
||||||
|
must be exported. */
|
||||||
|
|
||||||
// { dg-final { scan-not-hidden "_ZTI1A" } }
|
// { dg-final { scan-not-hidden "_ZTI1A" } }
|
||||||
// { dg-final { scan-not-hidden "_ZTS1A" } }
|
// { dg-final { scan-not-hidden "_ZTS1A" } }
|
||||||
// { dg-final { scan-not-hidden "_ZTV1B" } }
|
// { dg-final { scan-not-hidden "_ZTV1B" } }
|
||||||
|
|
Loading…
Reference in New Issue