From d9b4d2283a86ba0ed2a768f3d012ba4ee1859eab Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 9 May 2017 23:34:49 +0000 Subject: [PATCH] [ubsan] Mark overflow checks with !nosanitize Sanitizer instrumentation generally needs to be marked with !nosanitize, but we're not doing this properly for ubsan's overflow checks. r213291 has more information about why this is needed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@302598 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExprScalar.cpp | 2 +- test/CodeGen/sanitize-recover.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 7462f99a2a..b8d830ee9f 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -2552,6 +2552,7 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { if (isSigned) OpID |= 1; + CodeGenFunction::SanitizerScope SanScope(&CGF); llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); llvm::Function *intrinsic = CGF.CGM.getIntrinsic(IID, opTy); @@ -2567,7 +2568,6 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { // If the signed-integer-overflow sanitizer is enabled, emit a call to its // runtime. Otherwise, this is a -ftrapv check, so just emit a trap. if (!isSigned || CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) { - CodeGenFunction::SanitizerScope SanScope(&CGF); llvm::Value *NotOverflow = Builder.CreateNot(overflow); SanitizerMask Kind = isSigned ? SanitizerKind::SignedIntegerOverflow : SanitizerKind::UnsignedIntegerOverflow; diff --git a/test/CodeGen/sanitize-recover.c b/test/CodeGen/sanitize-recover.c index d714d58c7f..6358d9d04a 100644 --- a/test/CodeGen/sanitize-recover.c +++ b/test/CodeGen/sanitize-recover.c @@ -7,12 +7,12 @@ void test() { extern volatile unsigned x, y, z; - // RECOVER: uadd.with.overflow.i32 - // RECOVER: ubsan_handle_add_overflow( + // RECOVER: uadd.with.overflow.i32{{.*}}, !nosanitize + // RECOVER: ubsan_handle_add_overflow({{.*}}, !nosanitize // RECOVER-NOT: unreachable - // ABORT: uadd.with.overflow.i32 - // ABORT: ubsan_handle_add_overflow_abort( - // ABORT: unreachable + // ABORT: uadd.with.overflow.i32{{.*}}, !nosanitize + // ABORT: ubsan_handle_add_overflow_abort({{.*}}, !nosanitize + // ABORT: unreachable{{.*}}, !nosanitize x = y + z; } -- 2.40.0