[llvm] r332072 - [sanitizer-coverage] don't instrument a function if it's entry block ends with 'unreachable'
Kostya Serebryany via llvm-commits
llvm-commits at lists.llvm.org
Thu May 10 18:09:39 PDT 2018
Author: kcc
Date: Thu May 10 18:09:39 2018
New Revision: 332072
URL: http://llvm.org/viewvc/llvm-project?rev=332072&view=rev
Log:
[sanitizer-coverage] don't instrument a function if it's entry block ends with 'unreachable'
Added:
llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll
Modified:
llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=332072&r1=332071&r2=332072&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Thu May 10 18:09:39 2018
@@ -480,6 +480,8 @@ bool SanitizerCoverageModule::runOnFunct
if (F.getName() == "__local_stdio_printf_options" ||
F.getName() == "__local_stdio_scanf_options")
return false;
+ if (isa<UnreachableInst>(F.getEntryBlock().getTerminator()))
+ return false;
// Don't instrument functions using SEH for now. Splitting basic blocks like
// we do for coverage breaks WinEHPrepare.
// FIXME: Remove this when SEH no longer uses landingpad pattern matching.
Added: llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll?rev=332072&view=auto
==============================================================================
--- llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll (added)
+++ llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll Thu May 10 18:09:39 2018
@@ -0,0 +1,17 @@
+; Checks that a function with no-return in the entry block is not instrumented.
+; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s
+; CHECK-NOT: call void @__sanitizer_cov_trace_pc_guard
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define dso_local void @_Z3foov() noinline nounwind optnone uwtable {
+entry:
+ call void @abort() noreturn nounwind
+ unreachable
+
+return: ; No predecessors!
+ ret void
+}
+
+declare dso_local void @abort() noreturn nounwind
More information about the llvm-commits
mailing list