[fpc-pascal] inlining functions

Jonas Maebe jonas at freepascal.org
Wed Jan 2 00:41:01 CET 2019

On 2019-01-02 00:19, Benito van der Zander wrote:

> procedure TStrBuilder.append(const s: RawByteString);
> begin
> append(pchar(pointer(s)), length(s)); //inlinetest.pas(24,3) Note: Call 
> to subroutine "procedure TStrBuilder.append(const p:PChar;const 
> l:Int64);" marked as inline is not inlined
> end;

The compiler does not support inlining calls with parameters that cast a 
managed type to an unmanaged type at this time.

Regarding the reason why something cannot be inlined: sometimes you can 
get more information with -vd, but not always (and even then the reason 
may be vague).

I would personally be in favour of removing all of the inlining hints, 
because they are specific to a particular compiler version and mainly 
cause people to waste time on premature optimisation (or on what they 
think is an optimisation, but in many cases slows down things due to 
increased instruction cache pressure). Especially in this case: there is 
nothing potentially wrong with such a call, nor is the method in general 
not inlinable, so there is no way to get rid of the hint other than by 
removing the inline directive altogether (or by adding a version of that 
routine with a different name that is not declared as "inline"). This 
only promotes complicating code without any potential improvement of 
productivity or clarity of the code/programmer intent.


More information about the fpc-pascal mailing list