]> granicus.if.org Git - clang/commitdiff
Improve detection of trailing return types.
authorDaniel Jasper <djasper@google.com>
Thu, 11 Jul 2013 14:33:06 +0000 (14:33 +0000)
committerDaniel Jasper <djasper@google.com>
Thu, 11 Jul 2013 14:33:06 +0000 (14:33 +0000)
Trailing return types can only occur in declaration contexts.

Before:
  void f() { auto a = b -> c(); }

After:
  void f() { auto a = b->c(); }

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

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

index 1e4de6eb943b070c9584f514fd1ed69262a5abbe..14206445fac6cbcdc34d31e8d7010e470fbdaf8d 100644 (file)
@@ -607,7 +607,8 @@ private:
         NameFound = true;
       } else if (Current.is(tok::kw_auto)) {
         AutoFound = true;
-      } else if (Current.is(tok::arrow) && AutoFound) {
+      } else if (Current.is(tok::arrow) && AutoFound &&
+                 Line.MustBeDeclaration) {
         Current.Type = TT_TrailingReturnArrow;
       } else if (Current.isOneOf(tok::star, tok::amp, tok::ampamp)) {
         Current.Type =
index 42cd89cc8b7c523677eb619ad6d1f094aba72a85..37ac1a264a3a0b761bf61a3716ba0892b51778e8 100644 (file)
@@ -2476,6 +2476,9 @@ TEST_F(FormatTest, TrailingReturnType) {
   verifyFormat("template <size_t Order, typename T>\n"
                "auto load_img(const std::string &filename)\n"
                "    -> alias::tensor<Order, T, mem::tag::cpu> {}");
+
+  // Not trailing return types.
+  verifyFormat("void f() { auto a = b->c(); }");
 }
 
 TEST_F(FormatTest, BreaksFunctionDeclarationsWithTrailingTokens) {