Fixes incorrect handling of the declaration context stack.
authorManuel Klimek <klimek@google.com>
Wed, 23 Jan 2013 11:03:04 +0000 (11:03 +0000)
committerManuel Klimek <klimek@google.com>
Wed, 23 Jan 2013 11:03:04 +0000 (11:03 +0000)
llvm-svn: 173250

clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp

index 0470741..c21fa0d 100644 (file)
@@ -33,12 +33,12 @@ public:
   ScopedDeclarationState(UnwrappedLine &Line, std::vector<bool> &Stack,
                          bool MustBeDeclaration)
       : Line(Line), Stack(Stack) {
-    Stack.push_back(MustBeDeclaration);
     Line.MustBeDeclaration = MustBeDeclaration;
+    Stack.push_back(MustBeDeclaration);
   }
   ~ScopedDeclarationState() {
-    Line.MustBeDeclaration = Stack.back();
     Stack.pop_back();
+    Line.MustBeDeclaration = Stack.back();
   }
 private:
   UnwrappedLine &Line;
index fb5221e..114359d 100644 (file)
@@ -1682,6 +1682,16 @@ TEST_F(FormatTest, BlockComments) {
 TEST_F(FormatTest, FormatStarDependingOnContext) {
   verifyFormat("void f(int *a);");
   verifyFormat("void f() { f(fint * b); }");
+  verifyFormat("class A {\n  void f(int *a);\n};");
+  verifyFormat("class A {\n  int *a;\n};");
+  verifyFormat("namespace a {\n"
+               "namespace b {\n"
+               "class A {\n"
+               "  void f() {}\n"
+               "  int *a;\n"
+               "};\n"
+               "}\n"
+               "}");
 }
 
 TEST_F(FormatTest, SpecialTokensAtEndOfLine) {