pragma(inline, true) errors?
Johan Engelen
j at j.nl
Sat Apr 3 10:32:18 UTC 2021
On Friday, 2 April 2021 at 17:00:35 UTC, Steven Schveighoffer
wrote:
> On 4/2/21 12:27 PM, Johan Engelen wrote:
>> On Friday, 2 April 2021 at 14:40:00 UTC, Steven Schveighoffer
>> wrote:
>>>
>>> pragma(inline, true)
>>>
>>> means nothing in the current compiler. Well, it doesn't mean
>>> nothing, it only means that in the case of configuring the
>>> compiler to treat warnings as informational-only, you will
>>> get an informational warning. In the case that warnings are
>>> treated as an error, your code always compiles, and the
>>> function is only inlined based on implementation definitions.
>>>
>>> Technically, this is according to spec, as it says what the
>>> compiler does if a pragma(inline, true) function cannot be
>>> inlined is implementation defined. But it does say "an error
>>> message is typical". Given that there is only one front end,
>>> the typical (and in fact universal) behavior now is, do
>>> nothing.
>>
>> I'm pretty sure LDC will _never_ give any warning or error on
>> this pragma.
>> It will almost always inline the function into the caller (I
>> don't know of cases where it can't).
>
> So technically for LDC it will never encounter this case.
Pretty much.
When the function is recursive, it may prevent inlining.
> Does LDC make any inlining decisions based on this flag?
Yes: the flag sets the `alwaysinline` attribute on a function,
meaning that it will be inlined whenever possible, also at `-O0`.
https://d.godbolt.org/z/GEe8zxrro
-Johan
More information about the Digitalmars-d
mailing list