From 478ad94c8e1457a707f41fa64cf0967b219d2806 Mon Sep 17 00:00:00 2001 From: Alexandre Ganea Date: Fri, 15 Nov 2019 14:23:05 -0500 Subject: [PATCH] [GCOV] Skip artificial functions from being emitted This is a patch to support D66328, which was reverted until this lands. Enable a compiler-rt test that used to fail previously with D66328. Differential Revision: https://reviews.llvm.org/D67283 --- .../test/asan/TestCases/asan_and_llvm_coverage_test.cpp | 3 --- llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp | 5 ++++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler-rt/test/asan/TestCases/asan_and_llvm_coverage_test.cpp b/compiler-rt/test/asan/TestCases/asan_and_llvm_coverage_test.cpp index 2ba5a42d1b7b8..776684fd8045d 100644 --- a/compiler-rt/test/asan/TestCases/asan_and_llvm_coverage_test.cpp +++ b/compiler-rt/test/asan/TestCases/asan_and_llvm_coverage_test.cpp @@ -1,9 +1,6 @@ // RUN: %clangxx_asan -coverage -O0 %s -o %t // RUN: %env_asan_opts=check_initialization_order=1 %run %t 2>&1 | FileCheck %s -// We don't really support running tests using profile runtime on Windows. -// UNSUPPORTED: windows-msvc - #include int foo() { return 1; } int XXX = foo(); diff --git a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp index bda32878400ce..bf3e4ed3e31f2 100644 --- a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp +++ b/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp @@ -714,7 +714,10 @@ void GCOVProfiler::emitProfileNotes() { // to have a counter for the function definition. uint32_t Line = SP->getLine(); auto Filename = getFilename(SP); - Func.getBlock(&EntryBlock).getFile(Filename).addLine(Line); + + // Artificial functions such as global initializers + if (!SP->isArtificial()) + Func.getBlock(&EntryBlock).getFile(Filename).addLine(Line); for (auto &BB : F) { GCOVBlock &Block = Func.getBlock(&BB);