[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