Resolve Issue: coder.inline("never") and
coder.nonInlineCall Do Not Prevent Function Inlining
Issue
In certain cases, the code generator inlines a MATLAB® function, replacing the function call with a constant value, even
though you call the function using coder.nonInlineCall or you include the
coder.inline("never") directive in the function body.
For example, create a function test_inline that calls local
function local with a constant input. Instruct the code generator
not to inline local by using the
coder.inline("never")
directive.
function y = test_inline() x = local(0); if(x == 0) y = 0; else y = 1; end end function y = local(x) coder.inline("never"); y = x; end
test_inline and inspect
the entry-point function in the generated code. The code generator inlines
local, replacing the function call with a constant value,
even though the MATLAB definition contains the coder.inline("never")
directive.double test_inline(void)
{
return 0.0;
}Possible Solutions
To prevent the code generator from inlining a function, use coder.ignoreConst on one of the inputs at the function call site in
your MATLAB code. The coder.ignoreConst function prevents the
code generator from returning the function output as a constant value.
Modify test_inline to instruct the code generator to call
coder.ignoreConst on the input to
local.
function y = test_inline() x = local(coder.ignoreConst(0)); if(x == 0) y = 0; else y = 1; end end function y = local(x) coder.inline("never"); y = x; end
Generate C code for test_inline and inspect the entry-point
function in the generated code. The code generator does not inline
local.
static double local(void)
{
return 0.0;
}
double test_inline(void)
{
return !(local() == 0.0);
}See Also
coder.ignoreConst | coder.inline | coder.inlineCall | coder.nonInlineCall