From 0e2c9c8c4ad6d658fd8f61896e5a9ff5d445a2b0 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Tue, 11 Aug 2015 00:24:39 +0000 Subject: [PATCH] [libFuzzer] don't crash if the condition in a switch has unusual type (e.g. i72) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244544 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Instrumentation/SanitizerCoverage.cpp | 3 +++ .../SanitizerCoverage/switch-tracing.ll | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index c91b89df830..b6829aef2d5 100644 --- a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -375,6 +375,9 @@ void SanitizerCoverageModule::InjectTraceForSwitch( IRBuilder<> IRB(I); SmallVector Initializers; Value *Cond = SI->getCondition(); + if (Cond->getType()->getScalarSizeInBits() > + Int64Ty->getScalarSizeInBits()) + continue; Initializers.push_back(ConstantInt::get(Int64Ty, SI->getNumCases())); Initializers.push_back( ConstantInt::get(Int64Ty, Cond->getType()->getScalarSizeInBits())); diff --git a/test/Instrumentation/SanitizerCoverage/switch-tracing.ll b/test/Instrumentation/SanitizerCoverage/switch-tracing.ll index 9ad1c7acf63..aac56dbdeb7 100644 --- a/test/Instrumentation/SanitizerCoverage/switch-tracing.ll +++ b/test/Instrumentation/SanitizerCoverage/switch-tracing.ll @@ -30,3 +30,27 @@ sw.bb.2: ; preds = %entry sw.epilog: ; preds = %entry, %sw.bb.2, %sw.bb.1, %sw.bb ret void } + +define void @fooi72(i72 %x) { +entry: + switch i72 %x, label %sw.epilog [ + i72 1, label %sw.bb + i72 101, label %sw.bb.1 + i72 1001, label %sw.bb.2 + ] + +sw.bb: ; preds = %entry + tail call void @_Z3bari(i32 4) + br label %sw.epilog + +sw.bb.1: ; preds = %entry + tail call void @_Z3bari(i32 5) + br label %sw.epilog + +sw.bb.2: ; preds = %entry + tail call void @_Z3bari(i32 6) + br label %sw.epilog + +sw.epilog: ; preds = %entry, %sw.bb.2, %sw.bb.1, %sw.bb + ret void +} -- 2.34.1