[Bug c++/118071] New: C++ class method visible in shared object even with -fviisibility=hidden and -fvisibility-inlines-hidden
kstewart at efficios dot com
gcc-bugzilla@gcc.gnu.org
Mon Dec 16 20:46:48 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118071
Bug ID: 118071
Summary: C++ class method visible in shared object even with
-fviisibility=hidden and -fvisibility-inlines-hidden
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: kstewart at efficios dot com
Target Milestone: ---
Created attachment 59883
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59883&action=edit
lib.so-lib.ii from compilation
Given the following files:
```
// lib.h
#ifndef LIB_H
#define LIB_H
#ifdef __cplusplus
extern "C" {
#endif
__attribute__((visibility("default"))) int foo(int len);
#ifdef __cplusplus
}
#endif
#endif /* LIB_H */
```
And the source file, lib.cpp:
```
// lib.cpp
#include "lib.h"
#include <vector>
int foo(int len) {
auto x = std::vector<int> {};
x.resize(len);
return int(sizeof(x));
}
```
When compiled with the following command:
g++ -o lib.so -shared -fvisibility=hidden -fvisibility-inlines-hidden -fPIC
lib.h lib.cpp -save-temps
The produced shared object contains a symbol with default visibility for the
vector append method.
E.g.
```
$ nm -g -D -C lib.so
w __cxa_finalize@GLIBC_2.2.5
0000000000001179 T foo
w __gmon_start__
U __gxx_personality_v0@CXXABI_1.3
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U memcpy@GLIBC_2.14
U _Unwind_Resume@GCC_3.0
U operator delete(void*, unsigned long)@CXXABI_1.3.9
0000000000001506 W std::vector<int, std::allocator<int>
>::_M_default_append(unsigned long)
U operator new(unsigned long)@GLIBCXX_3.4
U std::__throw_bad_alloc()@GLIBCXX_3.4
U std::__throw_length_error(char const*)@GLIBCXX_3.4
U std::__throw_bad_array_new_length()@GLIBCXX_3.4.29
```
It seems to me that the `std::vector<int, std::allocator<int>...` symbol
shouldn't have the default visibility. Is there something I don't understand,
or is this a bug?
It seems somewhat similar to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105645 but I'm not sure if they
share the same cause.
Currently using gcc (Debian 14.2.0-8) 14.2.0.
More information about the Gcc-bugs
mailing list