On Wed, 16 Sep 2020, Jeff Law via Gcc-patches wrote: > ISTM this is a lot like the problem we have where we inline functions > with static data. To fix those we use STB_GNU_UNIQUE. But I don't see > any code in the C front-end which would utilize STB_GNU_UNIQUE. It's > support seems limited to C++. > > > How is this supposed to work for C?
C inline functions don't try to address this. The standard has a rule "An inline definition of a function with external linkage shall not contain a definition of a modifiable object with static or thread storage duration, and shall not contain a reference to an identifier with internal linkage.", which avoids some cases of this, but you can still get multiple copies of objects (with static storage duration, not modifiable, no linkage, i.e. static const defined inside an inline function) as noted in a footnote "Since an inline definition is distinct from the corresponding external definition and from any other corresponding inline definitions in other translation units, all corresponding objects with static storage duration are also distinct in each of the definitions.". -- Joseph S. Myers jos...@codesourcery.com