diff options
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 98740e8f9aa..881e5334b46 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -4504,10 +4504,14 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType, const CGCallee &OrigCallee Builder.CreateICmpEQ(CalleeRTTI, FTRTTIConst); llvm::Constant *StaticData[] = { EmitCheckSourceLocation(E->getLocStart()), - EmitCheckTypeDescriptor(CalleeType) + EmitCheckTypeDescriptor(CalleeType), + cast<FunctionProtoType>(FnType)->isNothrow(getContext()) + ? llvm::Constant::getNullValue(FTRTTIConst->getType()) + : FTRTTIConst }; EmitCheck(std::make_pair(CalleeRTTIMatch, SanitizerKind::Function), - SanitizerHandler::FunctionTypeMismatch, StaticData, CalleePtr); + SanitizerHandler::FunctionTypeMismatch, StaticData, + {CalleePtr, CalleeRTTI}); Builder.CreateBr(Cont); EmitBlock(Cont); |

