[clang] 936a67f - [clang-format] Extra spaces surrounding arrow in templated member call in variable decl

via cfe-commits cfe-commits at lists.llvm.org
Sat Dec 18 03:45:27 PST 2021


Author: mydeveloperday
Date: 2021-12-18T11:38:29Z
New Revision: 936a67f089efd31354cf1f1f3b864b81fb5aad0e

URL: https://github.com/llvm/llvm-project/commit/936a67f089efd31354cf1f1f3b864b81fb5aad0e
DIFF: https://github.com/llvm/llvm-project/commit/936a67f089efd31354cf1f1f3b864b81fb5aad0e.diff

LOG: [clang-format] Extra spaces surrounding arrow in templated member call in variable decl

https://github.com/llvm/llvm-project/issues/43196

Fixes #43196

-> is incorrectly interpreted as a TrailingReturnArrow if we've seen an auto

```
auto p = new A;
auto x = p -> foo<1>();
```

Reviewed By: curdeius

Differential Revision: https://reviews.llvm.org/D115903

Added: 
    

Modified: 
    clang/lib/Format/TokenAnnotator.cpp
    clang/unittests/Format/FormatTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 6fc3a4d5d18ae..5809e4c40070e 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -1679,7 +1679,7 @@ class AnnotatingParser {
       Current.setType(TT_LambdaArrow);
     } else if (Current.is(tok::arrow) && AutoFound && Line.MustBeDeclaration &&
                Current.NestingLevel == 0 &&
-               !Current.Previous->is(tok::kw_operator)) {
+               !Current.Previous->isOneOf(tok::kw_operator, tok::identifier)) {
       // not auto operator->() -> xxx;
       Current.setType(TT_TrailingReturnArrow);
     } else if (Current.is(tok::arrow) && Current.Previous &&

diff  --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 2b9a72e374144..c2a5fbb5c0d93 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -6780,6 +6780,9 @@ TEST_F(FormatTest, TrailingReturnType) {
 
   // Not trailing return types.
   verifyFormat("void f() { auto a = b->c(); }");
+  verifyFormat("auto a = p->foo();");
+  verifyFormat("int a = p->foo();");
+  verifyFormat("auto lmbd = [] NOEXCEPT -> int { return 0; };");
 }
 
 TEST_F(FormatTest, DeductionGuides) {


        


More information about the cfe-commits mailing list