[PATCH] D97101: [Coverage] Emit zero count gap region between statements if first statements contains return, throw, goto, co_return
Zequan Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 23 18:11:32 PST 2021
zequanwu added inline comments.
================
Comment at: clang/lib/CodeGen/CoverageMappingGen.cpp:593
MostRecentLocation = *StartLoc;
- completeDeferred(Count, MostRecentLocation);
}
----------------
vsk wrote:
> Does this mean a deferred gap region following a `break;` statement won't be completed before the next region is pushed?
I reverted this change.
================
Comment at: clang/lib/CodeGen/CoverageMappingGen.cpp:942
pushRegion(Counter::getZero());
- auto &ZeroRegion = getRegion();
- ZeroRegion.setDeferred(true);
- LastTerminatedRegion = {EndLoc, RegionStack.size()};
+ if (!HasTerminateStmt) {
+ auto &ZeroRegion = getRegion();
----------------
vsk wrote:
> What's supposed to be the difference between the zero region pushed after a `return;` vs. after a `break;`?
What I think is `DeferredRegion` is only used for `break;` and `continue`. Other terminate statements like `return;`, `throw` etc will use the logic in `VisitStmt` to emit gap region. So, I added this condition to separate the two cases.
================
Comment at: clang/lib/CodeGen/CoverageMappingGen.cpp:1057
+ if (SaveTerminateStmt)
+ HasTerminateStmt = true;
handleFileExit(getEnd(S));
----------------
vsk wrote:
> Can this replace all of the machinery around DeferredRegions? It'd be nice to just have one way to set up gaps between statements.
See above comments.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D97101/new/
https://reviews.llvm.org/D97101
More information about the cfe-commits
mailing list