[Bug c++/123957] Using `extern "C"` directive inside anonymous namespace results in mangled name
mike at sillyhouse dot net
gcc-bugzilla@gcc.gnu.org
Wed Feb 4 15:50:41 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123957
--- Comment #3 from Michael Ewart <mike at sillyhouse dot net> ---
Thank you for pointing me toward bug 117133. Yes, the underlying cause is
identical in that the inline assembler block I *actually* use is for the
purpose of using an `incbin` directive. However, in that instance the related
software was revised to specifically *not* use anonymous namespaces.
I do find it counterintuitive that an anonymous namespace behaves differently
to a named one, and also that the `extern "C"` appears to be silently ignored,
but I do accept that the situation is ambiguous.
In my particular use case the inline assembler block is emitted by a utility
macro within a framework which is widely used in application code. That would
make it a breaking change which I would rather avoid.
I did identify a workable solution to this asm labels
https://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html.
extern "C" const unsigned testval asm("testval");
Hopefully that is a lot less ambiguous and for now GCC 15 seems to be happy
with it!
More information about the Gcc-bugs
mailing list