Skip to content

Conversation

@owenca
Copy link
Contributor

@owenca owenca commented Jan 23, 2025

Don't insert a space between a type declaration r_paren and &/&&.

Fixes #124073.

Don't insert a space between a type declaration r_paren and &/&&.

Fixes llvm#124073.
@llvmbot
Copy link
Member

llvmbot commented Jan 23, 2025

@llvm/pr-subscribers-clang-format

Author: Owen Pan (owenca)

Changes

Don't insert a space between a type declaration r_paren and &/&&.

Fixes #124073.


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

2 Files Affected:

  • (modified) clang/lib/Format/TokenAnnotator.cpp (+2-2)
  • (modified) clang/unittests/Format/FormatTest.cpp (+1-1)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index bf5ee281c43119..f36cf7b638e0d2 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -5488,8 +5488,8 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line,
   }
   if ((Left.is(TT_TemplateOpener)) != (Right.is(TT_TemplateCloser)))
     return ShouldAddSpacesInAngles();
-  if (Left.is(tok::r_paren) && Right.is(TT_PointerOrReference) &&
-      Right.isOneOf(tok::amp, tok::ampamp)) {
+  if (Left.is(tok::r_paren) && Left.isNot(TT_TypeDeclarationParen) &&
+      Right.is(TT_PointerOrReference) && Right.isOneOf(tok::amp, tok::ampamp)) {
     return true;
   }
   // Space before TT_StructuredBindingLSquare.
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 61aa140dfdc9c0..265461561d2012 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -2084,7 +2084,6 @@ TEST_F(FormatTest, SeparatePointerReferenceAlignment) {
                Style);
 
   Style.PointerAlignment = FormatStyle::PAS_Left;
-  Style.ReferenceAlignment = FormatStyle::RAS_Pointer;
   verifyFormat("int* f1(int* a, int& b, int&& c);", Style);
   verifyFormat("int& f2(int&& c, int* a, int& b);", Style);
   verifyFormat("int&& f3(int& b, int&& c, int* a);", Style);
@@ -2118,6 +2117,7 @@ TEST_F(FormatTest, SeparatePointerReferenceAlignment) {
       "function<int(int&)> res1 = [](int& a) { return 0000000000000; },\n"
       "                    res2 = [](int& a) { return 0000000000000; };",
       Style);
+  verifyFormat("[](decltype(foo)& Bar) {}", Style);
 
   Style.AlignConsecutiveDeclarations.Enabled = true;
   Style.AlignConsecutiveDeclarations.AlignFunctionPointers = true;

Copy link
Contributor

@mydeveloperday mydeveloperday left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@owenca owenca merged commit 6330f1e into llvm:main Jan 24, 2025
10 checks passed
@owenca owenca deleted the 124073 branch January 24, 2025 05:44
@owenca owenca added this to the LLVM 20.X Release milestone Feb 12, 2025
@owenca
Copy link
Contributor Author

owenca commented Feb 12, 2025

/cherry-pick 6330f1e

@llvmbot
Copy link
Member

llvmbot commented Feb 12, 2025

Failed to cherry-pick: 6330f1e

https://github.com/llvm/llvm-project/actions/runs/13277229863

Please manually backport the fix and push it to your github fork. Once this is done, please create a pull request

@owenca
Copy link
Contributor Author

owenca commented Feb 12, 2025

Oops! 6330f1e was already in 20.x.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Needs Triage

Development

Successfully merging this pull request may close these issues.

[clang-format] Misformatted reference with PointerAlignment Left on main versus 19

5 participants