InstrProf: Only disable coverage in built-in macros, not all system macros

The issue I was trying to solve in r236547 was about built-in macros,
but I disabled coverage in all system macros. This is actually a bit
of overkill, and makes the display of coverage around system macros
degrade unnecessarily. Instead, limit this to builtins specifically.

llvm-svn: 237397
This commit is contained in:
Justin Bogner 2015-05-14 22:14:10 +00:00
parent c004b4d3a1
commit 682bfbf35f
2 changed files with 33 additions and 4 deletions

View File

@ -134,18 +134,23 @@ public:
: SM.getIncludeLoc(SM.getFileID(Loc));
}
/// \brief Get the start of \c S ignoring macro arguments and system macros.
/// \brief Return true if \c Loc is a location in a built-in macro.
bool isInBuiltin(SourceLocation Loc) {
return strcmp(SM.getBufferName(SM.getSpellingLoc(Loc)), "<built-in>") == 0;
}
/// \brief Get the start of \c S ignoring macro arguments and builtin macros.
SourceLocation getStart(const Stmt *S) {
SourceLocation Loc = S->getLocStart();
while (SM.isMacroArgExpansion(Loc) || SM.isInSystemMacro(Loc))
while (SM.isMacroArgExpansion(Loc) || isInBuiltin(Loc))
Loc = SM.getImmediateExpansionRange(Loc).first;
return Loc;
}
/// \brief Get the end of \c S ignoring macro arguments and system macros.
/// \brief Get the end of \c S ignoring macro arguments and builtin macros.
SourceLocation getEnd(const Stmt *S) {
SourceLocation Loc = S->getLocEnd();
while (SM.isMacroArgExpansion(Loc) || SM.isInSystemMacro(Loc))
while (SM.isMacroArgExpansion(Loc) || isInBuiltin(Loc))
Loc = SM.getImmediateExpansionRange(Loc).first;
return getPreciseTokenLocEnd(Loc);
}

View File

@ -0,0 +1,24 @@
// RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name system_macro.c -o - %s | FileCheck %s
#ifdef IS_SYSHEADER
#pragma clang system_header
#define Func(x) if (x) {}
#define SomeType int
#else
#define IS_SYSHEADER
#include __FILE__
// CHECK-LABEL: doSomething:
void doSomething(int x) { // CHECK: File 0, [[@LINE]]:25 -> {{[0-9:]+}} = #0
Func(x); // CHECK: Expansion,File 0, [[@LINE]]:3 -> [[@LINE]]:7
return;
// CHECK: Expansion,File 0, [[@LINE+1]]:3 -> [[@LINE+1]]:11
SomeType *f; // CHECK: File 0, [[@LINE]]:11 -> {{[0-9:]+}} = 0
}
int main() {}
#endif