diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 1949510af7b4a8fd46501a2e797af0ad8fadc525..0f4c2e2d50a67edad2aa728d37ef355c3f47344f 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -779,7 +779,7 @@ private: } else if (Current.is(tok::kw_auto)) { AutoFound = true; } else if (Current.is(tok::arrow) && AutoFound && - Line.MustBeDeclaration) { + Line.MustBeDeclaration && Current.NestingLevel == 0) { Current.Type = TT_TrailingReturnArrow; } else if (Current.isOneOf(tok::star, tok::amp, tok::ampamp)) { Current.Type = diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 05e0fc5aa89db1623960a3653d14dd9917139572..e363c76625ee8b986ce99fbc744b772f9914595a 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -3526,6 +3526,7 @@ TEST_F(FormatTest, TrailingReturnType) { " -> alias::tensor<Order, T, mem::tag::cpu> {}"); verifyFormat("auto SomeFunction(A aaaaaaaaaaaaaaaaaaaaa) const\n" " -> decltype(f(aaaaaaaaaaaaaaaaaaaaa)) {}"); + verifyFormat("auto doSomething(Aaaaaa* aaaaaa) -> decltype(aaaaaa->f()) {}"); // Not trailing return types. verifyFormat("void f() { auto a = b->c(); }");