Skip to content

Commit 5bb3492

Browse files
authored
[clang-format] Fix a bug in SpaceBeforeParensOptions (llvm#98849)
Handle constructors/destructors for AfterFunctionDeclarationName and AfterFunctionDefinitionName. Fixes llvm#98812. Fixes llvm#98820.
1 parent 578cf72 commit 5bb3492

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4713,14 +4713,13 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
47134713
if (Right.is(TT_OverloadedOperatorLParen))
47144714
return spaceRequiredBeforeParens(Right);
47154715
// Function declaration or definition
4716-
if (Line.MightBeFunctionDecl && (Left.is(TT_FunctionDeclarationName))) {
4717-
if (Line.mightBeFunctionDefinition()) {
4718-
return Style.SpaceBeforeParensOptions.AfterFunctionDefinitionName ||
4719-
spaceRequiredBeforeParens(Right);
4720-
} else {
4721-
return Style.SpaceBeforeParensOptions.AfterFunctionDeclarationName ||
4722-
spaceRequiredBeforeParens(Right);
4723-
}
4716+
if (Line.MightBeFunctionDecl && Right.is(TT_FunctionDeclarationLParen)) {
4717+
if (spaceRequiredBeforeParens(Right))
4718+
return true;
4719+
const auto &Options = Style.SpaceBeforeParensOptions;
4720+
return Line.mightBeFunctionDefinition()
4721+
? Options.AfterFunctionDefinitionName
4722+
: Options.AfterFunctionDeclarationName;
47244723
}
47254724
// Lambda
47264725
if (Line.Type != LT_PreprocessorDirective && Left.is(tok::r_square) &&

clang/unittests/Format/FormatTest.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16875,7 +16875,7 @@ TEST_F(FormatTest, ConfigurableSpaceBeforeParens) {
1687516875
verifyFormat("int f();", SpaceFuncDef);
1687616876
verifyFormat("void f (int a, T b) {}", SpaceFuncDef);
1687716877
verifyFormat("void __attribute__((asdf)) f (int a, T b) {}", SpaceFuncDef);
16878-
verifyFormat("A::A() : a(1) {}", SpaceFuncDef);
16878+
verifyFormat("A::A () : a(1) {}", SpaceFuncDef);
1687916879
verifyFormat("void f() __attribute__((asdf));", SpaceFuncDef);
1688016880
verifyFormat("void __attribute__((asdf)) f();", SpaceFuncDef);
1688116881
verifyFormat("#define A(x) x", SpaceFuncDef);
@@ -16901,7 +16901,8 @@ TEST_F(FormatTest, ConfigurableSpaceBeforeParens) {
1690116901
verifyFormat("T A::operator()() {}", SpaceFuncDef);
1690216902
verifyFormat("auto lambda = [] () { return 0; };", SpaceFuncDef);
1690316903
verifyFormat("int x = int(y);", SpaceFuncDef);
16904-
verifyFormat("M(std::size_t R, std::size_t C) : C(C), data(R) {}",
16904+
verifyFormat("void foo::bar () {}", SpaceFuncDef);
16905+
verifyFormat("M (std::size_t R, std::size_t C) : C(C), data(R) {}",
1690516906
SpaceFuncDef);
1690616907

1690716908
FormatStyle SpaceIfMacros = getLLVMStyle();

0 commit comments

Comments
 (0)