From 90452df7b159e67a56e3121eca5e64244f84556d Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Mon, 8 Sep 2014 20:17:19 +0000 Subject: Report source location of returns_nonnull attribute in UBSan reports. llvm-svn: 217400 --- clang/lib/CodeGen/CGCall.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'clang/lib/CodeGen') diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index cf794d0de3a..327a477b0c8 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2095,15 +2095,17 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI, llvm::Instruction *Ret; if (RV) { - if (SanOpts->ReturnsNonnullAttribute && - CurGD.getDecl()->hasAttr()) { - SanitizerScope SanScope(this); - llvm::Value *Cond = - Builder.CreateICmpNE(RV, llvm::Constant::getNullValue(RV->getType())); - llvm::Constant *StaticData[] = { - EmitCheckSourceLocation(EndLoc) - }; - EmitCheck(Cond, "nonnull_return", StaticData, None, CRK_Recoverable); + if (SanOpts->ReturnsNonnullAttribute) { + if (auto RetNNAttr = CurGD.getDecl()->getAttr()) { + SanitizerScope SanScope(this); + llvm::Value *Cond = Builder.CreateICmpNE( + RV, llvm::Constant::getNullValue(RV->getType())); + llvm::Constant *StaticData[] = { + EmitCheckSourceLocation(EndLoc), + EmitCheckSourceLocation(RetNNAttr->getLocation()), + }; + EmitCheck(Cond, "nonnull_return", StaticData, None, CRK_Recoverable); + } } Ret = Builder.CreateRet(RV); } else { -- cgit v1.2.3