https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126872

Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Change in visibility of C   |[16,17 Regression] Change
                   |bound functions with 16.2.0 |in visibility of C bound
                   |                            |functions with 16.2.0
           Assignee|unassigned at gcc dot gnu.org      |jvdelisle at gcc dot 
gnu.org

--- Comment #8 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Confirmed the 125430 patch did it. This was Claude assisted commit pre AI
policy. Using Claude Opus to analyze it. The fix is rather simple.

>From Claude:

Confirmed — it's a real regression, and it's ours.

┌──────────────────────────────────┬───────────────────────────────┐
│             Compiler             │            Result             │
├──────────────────────────────────┼───────────────────────────────┤
│ 13.4.1, 14.4.1, 15.3.1           │ GLOBAL DEFAULT — not affected │
├──────────────────────────────────┼───────────────────────────────┤
│ 16.1.1 (gcc-16 branch, 20260728) │ GLOBAL HIDDEN — affected      │
├──────────────────────────────────┼───────────────────────────────┤
│ 17.0.0 trunk (20260814)          │ GLOBAL HIDDEN — affected      │
└──────────────────────────────────┴───────────────────────────────┘

With explicit public :: doThing, all versions give GLOBAL DEFAULT, matching the
reporter's observation.

Note the symbol isn't actually made static — it stays GLOBAL but gets
STV_HIDDEN, so it's T in the .o and only collapses to t in nm after the shared
link. Same practical breakage for the user (not exported from the DSO), but
worth stating precisely in the PR.

Cause: commit 1cf8c5913bf (trunk, 2026-05-22, "module-contained PRIVATE
procedures must have global ELF linkage [PR125430]"), backported to gcc-16 as
63ba0af1843. That commit is in releases/gcc-16.2.0 but not 16.1.0 — exactly
matching the reporter seeing 16.1 good / 16.2 bad. gcc-15 never got it.

Reply via email to