[llvm-branch-commits] [clang] release/21.x: [clang-format] Don't swap `(const override)` with QAS_Right (#167191) (PR #170966)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Dec 5 20:12:33 PST 2025
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/170966
Backport dfe9838f9c790aa632bed0a1b67976c2a7e95f76
Requested by: @owenca
>From 17d714fcb43dd9361ba32895d2a185e008ac6961 Mon Sep 17 00:00:00 2001
From: owenca <owenpiano at gmail.com>
Date: Wed, 12 Nov 2025 20:55:34 -0800
Subject: [PATCH] [clang-format] Don't swap `(const override)` with QAS_Right
(#167191)
Fixes #154846
(cherry picked from commit dfe9838f9c790aa632bed0a1b67976c2a7e95f76)
---
clang/lib/Format/QualifierAlignmentFixer.cpp | 17 +++++++++++++----
clang/unittests/Format/QualifierFixerTest.cpp | 2 ++
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Format/QualifierAlignmentFixer.cpp b/clang/lib/Format/QualifierAlignmentFixer.cpp
index 441a37a4902b7..cc59dbd13621d 100644
--- a/clang/lib/Format/QualifierAlignmentFixer.cpp
+++ b/clang/lib/Format/QualifierAlignmentFixer.cpp
@@ -182,8 +182,11 @@ const FormatToken *LeftRightQualifierAlignmentFixer::analyzeRight(
// We only need to think about streams that begin with a qualifier.
if (Tok->isNot(QualifierType))
return Tok;
+
+ const auto *Next = Tok->getNextNonComment();
+
// Don't concern yourself if nothing follows the qualifier.
- if (!Tok->Next)
+ if (!Next)
return Tok;
// Skip qualifiers to the left to find what preceeds the qualifiers.
@@ -247,9 +250,15 @@ const FormatToken *LeftRightQualifierAlignmentFixer::analyzeRight(
}();
// Find the last qualifier to the right.
- const FormatToken *LastQual = Tok;
- while (isQualifier(LastQual->getNextNonComment()))
- LastQual = LastQual->getNextNonComment();
+ const auto *LastQual = Tok;
+ for (; isQualifier(Next); Next = Next->getNextNonComment())
+ LastQual = Next;
+
+ if (!LastQual || !Next ||
+ (LastQual->isOneOf(tok::kw_const, tok::kw_volatile) &&
+ Next->isOneOf(Keywords.kw_override, Keywords.kw_final))) {
+ return Tok;
+ }
// If this qualifier is to the right of a type or pointer do a partial sort
// and return.
diff --git a/clang/unittests/Format/QualifierFixerTest.cpp b/clang/unittests/Format/QualifierFixerTest.cpp
index f42f2e307f713..55bdda32453ba 100644
--- a/clang/unittests/Format/QualifierFixerTest.cpp
+++ b/clang/unittests/Format/QualifierFixerTest.cpp
@@ -215,6 +215,8 @@ TEST_F(QualifierFixerTest, RightQualifier) {
Style);
verifyFormat("void foo() const override;", Style);
verifyFormat("void foo() const override LLVM_READONLY;", Style);
+ verifyFormat("MOCK_METHOD(ReturnType, myMethod, (int), (const override));",
+ Style);
verifyFormat("void foo() const final;", Style);
verifyFormat("void foo() const final LLVM_READONLY;", Style);
verifyFormat("void foo() const LLVM_READONLY;", Style);
More information about the llvm-branch-commits
mailing list