[cfe-dev] libc++ and large stack frames

Erik van der Poel via cfe-dev cfe-dev at lists.llvm.org
Mon Jun 4 14:57:50 PDT 2018


On Mon, Jun 4, 2018 at 2:11 PM Duncan P. N. Exon Smith <dexonsmith at apple.com>
wrote:

>
>
> On Jun 4, 2018, at 13:52, Richard Smith <richard at metafoo.co.uk> wrote:
>
> On Mon, 4 Jun 2018, 21:43 Duncan P. N. Exon Smith via cfe-dev, <
> cfe-dev at lists.llvm.org> wrote:
>
>>
>>
>> On May 31, 2018, at 15:35, Richard Smith via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>> On 31 May 2018 at 14:38, Friedman, Eli via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>>> On 5/31/2018 1:07 PM, Erik van der Poel via cfe-dev wrote:
>>>
>>>> This is a proposal to add a configuration option to disable
>>>> _LIBCPP_INLINE_VISIBILITY, which causes large stack frames in non-optimized
>>>> builds because it uses the always_inline attribute to force significant
>>>> amounts of inlining of libc++ code.
>>>>
>>>> The new configuration option could be called
>>>> _LIBCPP_DISABLE_INLINE_VISIBILITY.
>>>>
>>>> Note that _LIBCPP_INLINE_VISIBILITY and _LIBCPP_ALWAYS_INLINE have
>>>> identical definitions. One could be renamed to the other or both could be
>>>> renamed to _LIBCPP_HIDE_FROM_ABI as part of this work.
>>>>
>>>
>> I think it's useful to have different names for these, since they have
>> different intent.  It would be reasonable to change the definition of one
>> without changing the other.
>>
>> Renaming _LIBCPP_INLINE_VISIBILITY to _LIBCPP_HIDE_FROM_ABI makes sense
>> to me though.
>>
>> One option we'd like to investigate (but haven't yet) is changing
>> _LIBCPP_INLINE_VISIBILITY/_LIBCPP_HIDE_FROM_ABI to drop the "always_inline"
>> but keep the "hidden".  Have you considered
>> _LIBCPP_DISABLE_ALWAYS_INLINE_IN_INLINE_VISIBILITY (or equivalent)?  If
>> not, why not?
>>
>
> IIRC that results in missing definitions for all of the explicitly
> instantiated template members, because the versions in the DSO are not
> visible to their consumers.
>
>
> It seems wrong to have any explicitly instantiated template members with
> _LIBCPP_INLINE_VISIBILITY.  Do we really do that?
>

Removing always_inline from _LIBCPP_INLINE_VISIBILITY was actually the
first thing I tried. I got errors like these (from ld):

hidden symbol
'_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLEPKc' is
not defined locally
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180604/0bca38cd/attachment.html>


More information about the cfe-dev mailing list