summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2017-05-09 23:34:49 +0000
committerVedant Kumar <vsk@apple.com>2017-05-09 23:34:49 +0000
commit4b62b5cdddf5f153cd5a41e4409995f3f8d69358 (patch)
treec52acc5266a60562be7e4849878902285a656cf6 /clang
parentf5f916007270ffb4313d7898a4e5b257caf93220 (diff)
downloadbcm5719-llvm-4b62b5cdddf5f153cd5a41e4409995f3f8d69358.tar.gz
bcm5719-llvm-4b62b5cdddf5f153cd5a41e4409995f3f8d69358.zip
[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. llvm-svn: 302598
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/CGExprScalar.cpp2
-rw-r--r--clang/test/CodeGen/sanitize-recover.c10
2 files changed, 6 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index 7462f99a2ae..b8d830ee9f3 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/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/clang/test/CodeGen/sanitize-recover.c b/clang/test/CodeGen/sanitize-recover.c
index d714d58c7f2..6358d9d04aa 100644
--- a/clang/test/CodeGen/sanitize-recover.c
+++ b/clang/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;
}
OpenPOWER on IntegriCloud