Red Hat Bugzilla – Bug 70019
attribute ((visibility("internal"))) is not valid on static functions
Last modified: 2007-04-18 12:44:46 EDT
Description of Problem:
If you have a function that is only used as the helper function of a symbol
exported from a shared library, then the traditional appraoch would be to
declare the symbol static -- giving it file scope and removing it from the ABI
of the library. However this is only visibility=hidden, as far as the compiler
understands it (as you could use that function in a function ptr etc.)
This means that if you declare the function "extern" with attribute
visibility=internal the compiler will generate better code.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Add an visibility("internal") attribute to a static function.
The compiler gives a "`visibility' attribute ignored" warning.
The compiler obeys the attribute just as if it was an extern declaration.
No, using "static" is the absolute best you can tell the compiler.
Even better than visibility=internal (which, incidentally, the compiler
does nothing special with at present). It means that all references
to the symbol are visible in the current translation unit.
Visibility attributes are not applicable to STB_LOCAL symbols, so the
compiler is right to complain.