pub enum InlineFailure {
Show 14 variants
Recursive,
Mismatch,
ByValue,
VaStart,
ComputedGoto,
Setjmp,
ApplyArgs,
MemorySsa,
Pack,
Alloca,
TooLarge,
TooDeep,
Unwinds,
Target,
}Expand description
Why a call to an always_inline function was not inlined.
Variants§
Recursive
The function reaches itself through calls of this kind.
Mismatch
The arguments or the results of the call are not what the body takes and gives.
ByValue
A parameter is a structure passed by value, whose copy the call is what makes. Only a call
that is not always_inline is refused for this. An always_inline one is inlined with the
copy made in the caller.
VaStart
The body starts a variable argument list of its own, which only a frame of its own has.
ComputedGoto
The body jumps to a label by its address, or a static table holds one of its labels, either of which would still name the original body from the copy.
Setjmp
The body calls setjmp, whose frame would become the caller’s.
ApplyArgs
The body saves the registers it was called with, which in the caller hold the caller’s.
MemorySsa
The IR has memory SSA in it, which this step runs before.
Pack
A va_arg_pack whose arguments cannot be forwarded to where it is.
Alloca
The body grows the stack by an amount only known when it runs, which in a loop in the caller would grow it once for every time round. Only a hint is refused for this.
TooLarge
The body is larger than a callee declared inline is allowed to be.
TooDeep
The call is inside more loops than a function called once may be inlined into.
Unwinds
The call has a landing pad but not in the shape the lowering builds, an unwound straight
after it read by the branch that ends its block, so there is no pad to hand the calls the
body makes once it is copied in.
Target
The callee is built for x86-64 extensions the caller is not, so its body may use instructions the caller may not assume. gcc’s words for it are the ones used.