forked from OSchip/llvm-project
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:
parent
c004b4d3a1
commit
682bfbf35f
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue