diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2014-09-08 20:17:19 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-09-08 20:17:19 +0000 |
commit | 90452df7b159e67a56e3121eca5e64244f84556d (patch) | |
tree | 4a50d4505dde195e688e0b65577db831eccbe284 /clang/lib | |
parent | 394c333e3e672a3c5844ba32a449fdd25e43f1d4 (diff) | |
download | bcm5719-llvm-90452df7b159e67a56e3121eca5e64244f84556d.tar.gz bcm5719-llvm-90452df7b159e67a56e3121eca5e64244f84556d.zip |
Report source location of returns_nonnull attribute in UBSan reports.
llvm-svn: 217400
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
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<ReturnsNonNullAttr>()) { - 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<ReturnsNonNullAttr>()) { + 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 { |