https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92855
--- Comment #3 from Thiago Macieira <thiago at kde dot org> --- The symbol in question is inline, therefore -fvisibility-inlines-hidden should trigger and cause it to become hidden too. Testcase showing that GCC will apply that: #define VISIBILITY(x) __attribute__((visibility(#x))) namespace N VISIBILITY(default) { void other(); inline void f() { other(); } void g() { f(); } } If you compile this with -fno-inline to cause f() to be emitted, you'll see: .section .text.N::f(),"axG",@progbits,N::f(),comdat .p2align 4 .weak N::f() .hidden N::f() .type N::f(), @function N::f(): jmp N::other() .size N::f(), .-N::f() See: https://gcc.godbolt.org/z/nW3RbX So I contend that the symbol should have been hidden and wasn't because of a bug. Please reconsider.