From c96f00012ba9b81dba57042a29361ecd0a99e284 Mon Sep 17 00:00:00 2001 From: Geoffrey Keating Date: Thu, 14 Jun 2007 21:04:10 +0000 Subject: [PATCH] decl2.c (determine_visibility): Ensure that functions with hidden types as parameters are hidden. * decl2.c (determine_visibility): Ensure that functions with hidden types as parameters are hidden. From-SVN: r125722 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/decl2.c | 3 ++- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/ext/visibility/overload-1.C | 9 +++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/visibility/overload-1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 39466304f24f..17cb31873534 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2007-06-14 Geoff Keating + * decl2.c (determine_visibility): Ensure that functions with + hidden types as parameters are hidden. + PR 31093 * decl2.c (determine_visibility): Remove duplicate code for handling type info. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 4d46410f6adf..61decb166377 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1783,7 +1783,8 @@ determine_visibility (tree decl) { /* Propagate anonymity from type to decl. */ int tvis = type_visibility (TREE_TYPE (decl)); - if (tvis == VISIBILITY_ANON) + if (tvis == VISIBILITY_ANON + || ! DECL_VISIBILITY_SPECIFIED (decl)) constrain_visibility (decl, tvis); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4d7a16a625e2..08bc5ada04de 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2007-06-14 Geoff Keating + * g++.dg/ext/visibility/overload-1.C: New. + PR 31093 * g++.dg/ext/visibility/anon4.C: New. diff --git a/gcc/testsuite/g++.dg/ext/visibility/overload-1.C b/gcc/testsuite/g++.dg/ext/visibility/overload-1.C new file mode 100644 index 000000000000..d841c53fb1ca --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/visibility/overload-1.C @@ -0,0 +1,9 @@ +/* Test that visibility of function parameters propagates to an undecorated + function. */ +/* { dg-require-visibility "" } +/* { dg-final { scan-hidden "_Z3fooP8a_struct" } } */ + +struct __attribute__((visibility("hidden"))) a_struct; + +void foo(a_struct * p) +{ } -- 2.47.2