[PATCH] D16934: [Coverage] Fix crash in VisitIfStmt

Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 8 11:30:10 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL260129: [Coverage] Fix crash when handling certain macro expansions (authored by vedantk).

Changed prior to commit:
  http://reviews.llvm.org/D16934?vs=47230&id=47232#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D16934

Files:
  cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
  cfe/trunk/test/CoverageMapping/macro-expressions.cpp

Index: cfe/trunk/test/CoverageMapping/macro-expressions.cpp
===================================================================
--- cfe/trunk/test/CoverageMapping/macro-expressions.cpp
+++ cfe/trunk/test/CoverageMapping/macro-expressions.cpp
@@ -12,6 +12,44 @@
 #define PRIo64 PRI_64_LENGTH_MODIFIER "o"
 #define PRIu64 PRI_64_LENGTH_MODIFIER "u"
 
+#define STMT(s) s
+
+void fn1() {
+  STMT(if (1));
+  STMT(while (1));
+  STMT(for (;;));
+  STMT(if) (1);
+  STMT(while) (1);
+  STMT(for) (;;);
+  if (1)
+    STMT(if (1)
+        STMT(if (1)));
+  if (1)
+    STMT(if (1)) 0;
+  if (1)
+    STMT(while (1)) 0;
+  if (1)
+    STMT(for (;;)) 0;
+  while (1)
+    STMT(if (1)) 0;
+  while (1)
+    STMT(while (1)) 0;
+  while (1)
+    STMT(for (;;)) 0;
+  for (;;)
+    STMT(if (1)) 0;
+  for (;;)
+    STMT(while (1)) 0;
+  for (;;)
+    STMT(for (;;)) 0;
+}
+
+void STMT(fn2()) {
+}
+
+void STMT(fn3)() {
+}
+
 // CHECK: foo
 // CHECK-NEXT: File 0, [[@LINE+1]]:17 -> {{[0-9]+}}:2 = #0
 void foo(int i) {
Index: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
===================================================================
--- cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
+++ cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
@@ -434,6 +434,12 @@
     Visit(S);
     Counter ExitCount = getRegion().getCounter();
     popRegions(Index);
+
+    // The statement may be spanned by an expansion. Make sure we handle a file
+    // exit out of this expansion before moving to the next statement.
+    if (SM.isBeforeInTranslationUnit(getStart(S), S->getLocStart()))
+      MostRecentLocation = getEnd(S);
+
     return ExitCount;
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16934.47232.patch
Type: text/x-patch
Size: 1630 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160208/eae91c12/attachment.bin>


More information about the cfe-commits mailing list