Index: ChangeLog
2006-07-12 Geoffrey Keating <geoffk@apple.com> * doc/invoke.texi (C++ Dialect Options): Explain difference between -fvisibility-inlines-hidden and setting hidden visibility explicitly. Index: cp/ChangeLog 2006-07-12 Geoffrey Keating <geoffk@apple.com> * decl2.c (determine_visibility): Don't change visibility of function locals because of -fvisibility-inlines-hidden. Index: testsuite/ChangeLog 2006-07-12 Geoffrey Keating <geoffk@apple.com> * g++.dg/ext/visibility/fvisibility-inlines-hidden-2.C: New. From-SVN: r115411
This commit is contained in:
parent
72af9f0b51
commit
7c0de6a544
6 changed files with 52 additions and 6 deletions
|
@ -1,3 +1,9 @@
|
|||
2006-07-12 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* doc/invoke.texi (C++ Dialect Options): Explain difference
|
||||
between -fvisibility-inlines-hidden and setting hidden
|
||||
visibility explicitly.
|
||||
|
||||
2006-07-12 Eric Christopher <echristo@apple.com>
|
||||
|
||||
* config/t-slibgcc-darwin (SHLIB_LINK): Don't munge stmp-lipo.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-07-12 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* decl2.c (determine_visibility): Don't change visibility of
|
||||
function locals because of -fvisibility-inlines-hidden.
|
||||
|
||||
2006-07-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/28217
|
||||
|
|
|
@ -1712,13 +1712,20 @@ determine_visibility (tree decl)
|
|||
gcc_assert (TREE_CODE (decl) != VAR_DECL
|
||||
|| !DECL_VTABLE_OR_VTT_P (decl));
|
||||
|
||||
if (DECL_FUNCTION_SCOPE_P (decl))
|
||||
if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
|
||||
{
|
||||
/* Local statics and classes get the visibility of their
|
||||
containing function. */
|
||||
containing function by default, except that
|
||||
-fvisibility-inlines-hidden doesn't affect them. */
|
||||
tree fn = DECL_CONTEXT (decl);
|
||||
DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
|
||||
DECL_VISIBILITY_SPECIFIED (decl) = DECL_VISIBILITY_SPECIFIED (fn);
|
||||
if (DECL_VISIBILITY_SPECIFIED (fn) || ! DECL_CLASS_SCOPE_P (fn))
|
||||
{
|
||||
DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
|
||||
DECL_VISIBILITY_SPECIFIED (decl) =
|
||||
DECL_VISIBILITY_SPECIFIED (fn);
|
||||
}
|
||||
else
|
||||
determine_visibility_from_class (decl, DECL_CONTEXT (fn));
|
||||
|
||||
/* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
|
||||
but have no TEMPLATE_INFO, so don't try to check it. */
|
||||
|
|
|
@ -1618,10 +1618,15 @@ when used within the DSO@. Enabling this option can have a dramatic effect
|
|||
on load and link times of a DSO as it massively reduces the size of the
|
||||
dynamic export table when the library makes heavy use of templates.
|
||||
|
||||
The behaviour of this switch is not quite the same as marking the
|
||||
methods as hidden directly, because it does not affect static variables
|
||||
local to the function or cause the compiler to deduce that
|
||||
the function is defined in only one shared object.
|
||||
|
||||
You may mark a method as having a visibility explicitly to negate the
|
||||
effect of the switch for that method. For example, if you do want to
|
||||
compare pointers to a particular inline method, or the method has
|
||||
local static data, you might mark it as having default visibility.
|
||||
compare pointers to a particular inline method, you might mark it as
|
||||
having default visibility.
|
||||
|
||||
@item -fno-weak
|
||||
@opindex fno-weak
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2006-07-12 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* g++.dg/ext/visibility/fvisibility-inlines-hidden-2.C: New.
|
||||
|
||||
2006-07-13 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/25097
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
/* Test that -fvisibility-inlines-hidden doesn't affect static variables. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-visibility "" } */
|
||||
/* { dg-options "-fvisibility-inlines-hidden" } */
|
||||
/* { dg-final { scan-not-hidden "_ZZN3foo7my_funcEvE1x" } } */
|
||||
|
||||
struct foo
|
||||
{
|
||||
int my_func() {
|
||||
static int x;
|
||||
return x++;
|
||||
}
|
||||
};
|
||||
|
||||
int t()
|
||||
{
|
||||
foo f;
|
||||
return f.my_func();
|
||||
}
|
Loading…
Add table
Reference in a new issue