diff options
-rw-r--r-- | clang/lib/CodeGen/CoverageMappingGen.cpp | 8 | ||||
-rw-r--r-- | clang/test/CoverageMapping/block-storage-starts-region.m | 12 |
2 files changed, 16 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp index fca17264e8f..65415d9d2d2 100644 --- a/clang/lib/CodeGen/CoverageMappingGen.cpp +++ b/clang/lib/CodeGen/CoverageMappingGen.cpp @@ -134,18 +134,18 @@ public: : SM.getIncludeLoc(SM.getFileID(Loc)); } - /// \brief Get the start of \c S ignoring macro argument locations. + /// \brief Get the start of \c S ignoring macro arguments and system macros. SourceLocation getStart(const Stmt *S) { SourceLocation Loc = S->getLocStart(); - while (SM.isMacroArgExpansion(Loc)) + while (SM.isMacroArgExpansion(Loc) || SM.isInSystemMacro(Loc)) Loc = SM.getImmediateExpansionRange(Loc).first; return Loc; } - /// \brief Get the end of \c S ignoring macro argument locations. + /// \brief Get the end of \c S ignoring macro arguments and system macros. SourceLocation getEnd(const Stmt *S) { SourceLocation Loc = S->getLocEnd(); - while (SM.isMacroArgExpansion(Loc)) + while (SM.isMacroArgExpansion(Loc) || SM.isInSystemMacro(Loc)) Loc = SM.getImmediateExpansionRange(Loc).first; return getPreciseTokenLocEnd(Loc); } diff --git a/clang/test/CoverageMapping/block-storage-starts-region.m b/clang/test/CoverageMapping/block-storage-starts-region.m new file mode 100644 index 00000000000..7997c8d4d29 --- /dev/null +++ b/clang/test/CoverageMapping/block-storage-starts-region.m @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -triple x86_64-apple-darwin -fobjc-runtime=macosx-10.10.0 -fblocks -fobjc-arc %s | FileCheck %s + +@interface Foo +@end + +// CHECK-LABEL: doSomething: +void doSomething() { // CHECK: File 0, [[@LINE]]:20 -> {{[0-9:]+}} = #0 + return; + __block Foo *f; // CHECK: File 0, [[@LINE]]:3 -> {{[0-9:]+}} = 0 +} + +int main() {} |