diff options
-rw-r--r-- | lib/Format/TokenAnnotator.cpp | 3 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 15 |
2 files changed, 13 insertions, 5 deletions
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 359923f02f..80780185c0 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -602,7 +602,8 @@ private: !Current.Children.empty() && (Current.Children[0].is(tok::equal) || Current.Children[0].is(tok::semi) || Current.Children[0].is(tok::l_brace)); - if (ParensNotExpr && !ParensCouldEndDecl) + if (ParensNotExpr && !ParensCouldEndDecl && + Contexts.back().IsExpression) // FIXME: We need to get smarter and understand more cases of casts. Current.Type = TT_CastRParen; } else if (Current.is(tok::at) && Current.Children.size()) { diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 3cf151e43f..daaeca3fa0 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1728,10 +1728,12 @@ TEST_F(FormatTest, UndestandsOverloadedOperators) { } TEST_F(FormatTest, UnderstandsNewAndDelete) { - verifyFormat("A *a = new A;"); - verifyFormat("A *a = new (placement) A;"); - verifyFormat("delete a;"); - verifyFormat("delete (A *)a;"); + verifyFormat("void f() {\n" + " A *a = new A;\n" + " A *a = new (placement) A;\n" + " delete a;\n" + " delete (A *)a;\n" + "}"); } TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { @@ -1895,6 +1897,11 @@ TEST_F(FormatTest, FormatsCasts) { verifyFormat("void f(int i = (kA * kB) & kMask) {}"); verifyFormat("int a = sizeof(int) * b;"); verifyFormat("int a = alignof(int) * b;"); + + // These are not casts, but at some point were confused with casts. + verifyFormat("virtual void foo(int *) override;"); + verifyFormat("virtual void foo(char &) const;"); + verifyFormat("virtual void foo(int *a, char *) const;"); } TEST_F(FormatTest, FormatsFunctionTypes) { |