We have an assertion failure if, for example, the definition of an unused inline function starts
in one macro and ends in another. This patch fixes the issue by finding the common ancestor
of the start and end locations of that function's body and changing the locations accordingly.
Details
Details
- Reviewers
davidxl bogner vsk - Commits
- rGd9e1a61d3149: Reapply [Coverage] Fix an assertion failure if the definition of an unused…
rG6fd589a763a3: [Coverage] Fix an assertion failure if the definition of an unused function…
rC271995: Reapply [Coverage] Fix an assertion failure if the definition of an unused…
rC271969: [Coverage] Fix an assertion failure if the definition of an unused function…
rL271995: Reapply [Coverage] Fix an assertion failure if the definition of an unused…
rL271969: [Coverage] Fix an assertion failure if the definition of an unused function…
Diff Detail
Diff Detail
- Repository
- rL LLVM
Event Timeline
Comment Actions
Thanks, this looks good overall. I just have a few minor comments.
lib/CodeGen/CoverageMappingGen.cpp | ||
---|---|---|
329 ↗ | (On Diff #59648) | SM.getFileID() can be expensive if there's a miss in the SourceManager's cache. Seeing as End isn't updated in this loop, it might be profitable/cleaner to maintain dedicated StartFileID and EndFileID variables. Wdyt? |
331 ↗ | (On Diff #59648) | Please add a string here, e.g "Declaration start loc not nested within a known region". |
336 ↗ | (On Diff #59648) | ^ ditto. |
Comment Actions
- Use StartFileID and EndFileID variables to eliminate redundant calls to SM.getFileID().
- Add comment strings to asserts.
Comment Actions
FYI :)
--- a/clang/test/CoverageMapping/unused_function.cpp +++ b/clang/test/CoverageMapping/unused_function.cpp @@ -3,34 +3,34 @@ #define START_SCOPE { #define END_SCOPE } -// CHECK: _Z2f0v: +// CHECK: {{_Z2f0v|\?f0@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+1]]:18 -> [[@LINE+1]]:20 = 0 inline void f0() {} -// CHECK: _Z2f1v: +// CHECK: {{_Z2f1v|\?f1@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+1]]:18 -> [[@LINE+1]]:31 = 0 inline void f1() START_SCOPE } -// CHECK: _Z2f2v: +// CHECK: {{_Z2f2v|\?f2@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+1]]:18 -> [[@LINE+1]]:29 = 0 inline void f2() { END_SCOPE -// CHECK: _Z2f3v: +// CHECK: {{_Z2f3v|\?f3@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+1]]:18 -> [[@LINE+1]]:39 = 0 inline void f3() START_SCOPE END_SCOPE -// CHECK: _Z2f4v: +// CHECK: {{_Z2f4v|\?f4@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+2]]:10 -> [[@LINE+3]]:2 = 0 inline void f4() #include "Inputs/starts_a_scope_only" } -// CHECK: _Z2f5v: +// CHECK: {{_Z2f5v|\?f5@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+1]]:18 -> [[@LINE+2]]:36 = 0 inline void f5() { #include "Inputs/ends_a_scope_only" -// CHECK: _Z2f6v: +// CHECK: {{_Z2f6v|\?f6@@YAXXZ}}: // CHECK-NEXT: File 0, [[@LINE+2]]:10 -> [[@LINE+3]]:36 = 0 inline void f6() #include "Inputs/starts_a_scope_only"