[clang][patch] Modify diagnostic level from err to warn: anyx86_interrupt_regsave

Reviewed By: Aaron Ballman

Differential Revision: https://reviews.llvm.org/D100511
This commit is contained in:
Melanie Blower 2021-04-14 17:07:54 -04:00
parent 9178fb73e1
commit 938b863bb5
3 changed files with 6 additions and 5 deletions

View File

@ -293,9 +293,10 @@ def err_anyx86_interrupt_attribute : Error<
"a pointer as the first parameter|a %2 type as the second parameter}1">;
def err_anyx86_interrupt_called : Error<
"interrupt service routine cannot be called directly">;
def err_anyx86_interrupt_regsave : Error<
"interrupt service routine may only call a function"
" with attribute 'no_caller_saved_registers'">;
def warn_anyx86_interrupt_regsave : Warning<
"interrupt service routine should only call a function"
" with attribute 'no_caller_saved_registers'">,
InGroup<DiagGroup<"interrupt-service-routine">>;
def warn_arm_interrupt_calling_convention : Warning<
"call to function without interrupt attribute could clobber interruptee's VFP registers">,
InGroup<Extra>;

View File

@ -6607,7 +6607,7 @@ ExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
}
if (Caller->hasAttr<AnyX86InterruptAttr>() &&
((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {
Diag(Fn->getExprLoc(), diag::err_anyx86_interrupt_regsave);
Diag(Fn->getExprLoc(), diag::warn_anyx86_interrupt_regsave);
if (FDecl)
Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;
}

View File

@ -51,7 +51,7 @@ typedef unsigned int Arg2Type;
__attribute__((no_caller_saved_registers))
#else
// expected-note@+3 {{'foo9' declared here}}
// expected-error@+4 {{interrupt service routine may only call a function with attribute 'no_caller_saved_registers'}}
// expected-warning@+4 {{interrupt service routine should only call a function with attribute 'no_caller_saved_registers'}}
#endif
void foo9(int *a, Arg2Type b) {}
__attribute__((interrupt)) void fooA(int *a, Arg2Type b) {