Skip to content

Commit b04664b

Browse files
authored
[clang-format] Handle constrained auto in QualifierAlignment (#72251)
Fixed #69610.
1 parent 250d9c8 commit b04664b

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

clang/lib/Format/QualifierAlignmentFixer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,9 @@ const FormatToken *LeftRightQualifierAlignmentFixer::analyzeRight(
346346
}
347347
}
348348

349+
if (Next->is(tok::kw_auto))
350+
TypeToken = Next;
351+
349352
// Place the Qualifier at the end of the list of qualifiers.
350353
while (isQualifier(TypeToken->getNextNonComment())) {
351354
// The case `volatile Foo::iter const` -> `Foo::iter const volatile`
@@ -446,6 +449,9 @@ const FormatToken *LeftRightQualifierAlignmentFixer::analyzeLeft(
446449
return false;
447450
}
448451

452+
if (Tok->endsSequence(tok::kw_auto, tok::identifier))
453+
return false;
454+
449455
return true;
450456
};
451457

clang/unittests/Format/QualifierFixerTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,11 @@ TEST_F(QualifierFixerTest, RightQualifier) {
352352
verifyFormat("auto const &ir = i;", "const auto &ir = i;", Style);
353353
verifyFormat("auto const *ip = &i;", "const auto *ip = &i;", Style);
354354

355+
verifyFormat("void f(Concept auto const &x);",
356+
"void f(const Concept auto &x);", Style);
357+
verifyFormat("void f(std::integral auto const &x);",
358+
"void f(const std::integral auto &x);", Style);
359+
355360
verifyFormat("Foo<Foo<int> const> P;\n#if 0\n#else\n#endif",
356361
"Foo<const Foo<int>> P;\n#if 0\n#else\n#endif", Style);
357362

@@ -653,6 +658,11 @@ TEST_F(QualifierFixerTest, LeftQualifier) {
653658
verifyFormat("const auto &ir = i;", "auto const &ir = i;", Style);
654659
verifyFormat("const auto *ip = &i;", "auto const *ip = &i;", Style);
655660

661+
verifyFormat("void f(const Concept auto &x);",
662+
"void f(Concept auto const &x);", Style);
663+
verifyFormat("void f(const std::integral auto &x);",
664+
"void f(std::integral auto const &x);", Style);
665+
656666
verifyFormat("Foo<const Foo<int>> P;\n#if 0\n#else\n#endif",
657667
"Foo<Foo<int> const> P;\n#if 0\n#else\n#endif", Style);
658668

0 commit comments

Comments
 (0)