Commit 7c0de6a5 by Geoffrey Keating Committed by Geoffrey Keating

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
parent 72af9f0b
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.
......
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
......
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
/* 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();
}
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