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