]> granicus.if.org Git - clang/commitdiff
Fix expression recognition in for-loops.
authorDaniel Jasper <djasper@google.com>
Fri, 3 May 2013 14:41:24 +0000 (14:41 +0000)
committerDaniel Jasper <djasper@google.com>
Fri, 3 May 2013 14:41:24 +0000 (14:41 +0000)
Before: for (; a&& b;) {}
After:  for (; a && b;) {}

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181017 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTest.cpp

index 3e67182f871b6fd2f7f3536d0b90774f295727d4..6fa79813fabe1941ee5bf72442af0d8a52539ed6 100644 (file)
@@ -596,6 +596,9 @@ private:
       Contexts.back().IsExpression = true;
     } else if (Current.is(tok::kw_new)) {
       Contexts.back().CanBeExpression = false;
+    } else if (Current.is(tok::semi)) {
+      // This should be the condition or increment in a for-loop.
+      Contexts.back().IsExpression = true;
     }
 
     if (Current.Type == TT_Unknown) {
index 055b9d1cb281355c3890288ef665087f3d248a40..abb2b5819c43537fa8d87408427a4b866b4db996 100644 (file)
@@ -2547,6 +2547,7 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {
   verifyIndependentOfContext("A<int **, int **> a;");
   verifyIndependentOfContext("void f(int *a = d * e, int *b = c * d);");
   verifyFormat("for (char **a = b; *a; ++a) {\n}");
+  verifyFormat("for (; a && b;) {\n}");
 
   verifyFormat(
       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"