Author: vedantk Date: Tue May 31 13:06:19 2016 New Revision: 271308 URL: http://llvm.org/viewvc/llvm-project?rev=271308&view=rev Log: [Coverage] Fix crash on a switch partially covered by a macro (PR27948)
We have to handle file exits before and after visiting regions in the switch body. Fixes PR27948. Modified: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp cfe/trunk/test/CoverageMapping/switchmacro.c Modified: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp?rev=271308&r1=271307&r2=271308&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp (original) +++ cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp Tue May 31 13:06:19 2016 @@ -783,8 +783,10 @@ struct CounterCoverageMappingBuilder Visit(Child); popRegions(Index); } - } else + } else { + handleFileExit(getStart(Body)); propagateCounts(Counter::getZero(), Body); + } BreakContinue BC = BreakContinueStack.pop_back_val(); if (!BreakContinueStack.empty()) @@ -792,7 +794,9 @@ struct CounterCoverageMappingBuilder BreakContinueStack.back().ContinueCount, BC.ContinueCount); Counter ExitCount = getRegionCounter(S); - pushRegion(ExitCount, getStart(S), getEnd(S)); + SourceLocation ExitLoc = getEnd(S); + pushRegion(ExitCount, getStart(S), ExitLoc); + handleFileExit(ExitLoc); } void VisitSwitchCase(const SwitchCase *S) { Modified: cfe/trunk/test/CoverageMapping/switchmacro.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CoverageMapping/switchmacro.c?rev=271308&r1=271307&r2=271308&view=diff ============================================================================== --- cfe/trunk/test/CoverageMapping/switchmacro.c (original) +++ cfe/trunk/test/CoverageMapping/switchmacro.c Tue May 31 13:06:19 2016 @@ -32,6 +32,14 @@ default: ; END } +// PR27948 - Crash when handling a switch partially covered by a macro +// CHECK: baz +#define START2 switch (0) default: +void baz() { + for (;;) + START2 return; // CHECK: Expansion,File 0, [[@LINE]]:5 -> [[@LINE]]:11 = #1 (Expanded file = 1) +} + int main(int argc, const char *argv[]) { foo(3); return 0; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits