DECL_NO_INLINE_WARNING_P (decl->csym) = 1;
}
+ /* In [pragma/inline], functions decorated with 'pragma(inline)' affects
+ whether they are inlined or not. */
+ if (fd->inlining == PINLINEalways)
+ DECL_DECLARED_INLINE_P (decl->csym) = 1;
+ else if (fd->inlining == PINLINEnever)
+ DECL_UNINLINABLE (decl->csym) = 1;
+
/* Function was declared 'naked'. */
if (fd->naked)
{
outputs, inputs, clobbers, labels);
SET_EXPR_LOCATION (exp, make_location_t (s->loc));
- /* If the extended syntax was not used, mark the ASM_EXPR. */
+ /* If the extended syntax was not used, mark the ASM_EXPR as being an
+ ASM_INPUT expression instead of an ASM_OPERAND with no operands. */
if (s->args == NULL && s->clobbers == NULL)
ASM_INPUT_P (exp) = 1;
optimization, this could be unset when building in release mode. */
ASM_VOLATILE_P (exp) = 1;
+ /* If the function has been annotated with 'pragma(inline)', then mark
+ the asm expression as being inline as well. */
+ if (this->func_->inlining == PINLINEalways)
+ ASM_INLINE_P (exp) = 1;
+
add_stmt (exp);
}