Bug 70019

Summary: attribute ((visibility("internal"))) is not valid on static functions
Product: [Retired] Red Hat Linux Reporter: James Antill <james.antill>
Component: gccAssignee: Jakub Jelinek <jakub>
Status: CLOSED NOTABUG QA Contact: Brian Brock <bbrock>
Severity: medium Docs Contact:
Priority: medium    
Version: 7.3   
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2004-10-02 23:45:26 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description James Antill 2002-07-29 04:07:37 UTC
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):
gcc-2.96-112

How Reproducible:
Always

Steps to Reproduce:
1. Add an visibility("internal") attribute to a static function.

Actual Results:
 The compiler gives a "`visibility' attribute ignored" warning.

Expected Results:
 The compiler obeys the attribute just as if it was an extern declaration.

Additional Information:

Comment 1 Richard Henderson 2004-10-02 23:45:26 UTC
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.