forked from OSchip/llvm-project
[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:
parent
9178fb73e1
commit
938b863bb5
|
@ -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>;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue