llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-format

Author: None (rayroudc)

<details>
<summary>Changes</summary>

When enabling alignment of consecutive declarations and reference right 
alignment, the needed space between `&amp; ` and ` = ` is removed in the 
following use case.

Problem (does not compile)
```
int    a(const Test    &amp;= Test());
double b();
```

Expected:
```
int    a(const Test &amp; = Test());
double b();
```

Test command:

```
echo "int    a(const Test&amp; = Test()); double b();" | clang-format 
-style="{AlignConsecutiveDeclarations: true, ReferenceAlignment: Right}"
```

---
Full diff: https://github.com/llvm/llvm-project/pull/86254.diff


2 Files Affected:

- (modified) clang/lib/Format/WhitespaceManager.cpp (+4) 
- (modified) clang/unittests/Format/FormatTest.cpp (+7) 


``````````diff
diff --git a/clang/lib/Format/WhitespaceManager.cpp 
b/clang/lib/Format/WhitespaceManager.cpp
index 6577c19cdf7978..c4a7d54e5bc8ed 100644
--- a/clang/lib/Format/WhitespaceManager.cpp
+++ b/clang/lib/Format/WhitespaceManager.cpp
@@ -471,6 +471,10 @@ AlignTokenSequence(const FormatStyle &Style, unsigned 
Start, unsigned End,
            Previous >= 0 &&
            Changes[Previous].Tok->getType() == TT_PointerOrReference;
            --Previous) {
+        // Don't align function default argument using return type maximum size
+        if (Changes[Previous + 1].Tok->is(tok::equal)) {
+          continue;
+        }
         assert(Changes[Previous].Tok->isPointerOrReference());
         if (Changes[Previous].Tok->isNot(tok::star)) {
           if (ReferenceNotRightAligned)
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index a14b002c37c631..23169363542ec1 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -19056,6 +19056,9 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
   verifyFormat("int    a(int x);\n"
                "double b();",
                Alignment);
+  verifyFormat("int    a(const Test & = Test());\n"
+               "double b();",
+               Alignment);
   verifyFormat("struct Test {\n"
                "  Test(const Test &) = default;\n"
                "  ~Test() = default;\n"
@@ -19277,6 +19280,10 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
                "int    foobar;",
                AlignmentLeft);
 
+  verifyFormat("int    a(const Test& = Test());\n"
+               "double b();",
+               AlignmentLeft);
+
   // PAS_Middle
   FormatStyle AlignmentMiddle = Alignment;
   AlignmentMiddle.PointerAlignment = FormatStyle::PAS_Middle;

``````````

</details>


https://github.com/llvm/llvm-project/pull/86254
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to