From: Owen Pan Date: Thu, 12 Jan 2023 04:07:21 +0000 (-0800) Subject: [clang-format] Fix a bug in DerivePointerAlignment fallback X-Git-Tag: upstream/17.0.6~20972 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e2aa8bb6dea365e972528ad330f575b6b6e254b;p=platform%2Fupstream%2Fllvm.git [clang-format] Fix a bug in DerivePointerAlignment fallback Fixes #59953. Differential Revision: https://reviews.llvm.org/D141563 --- diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 68f24fa..6b37407 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -2282,9 +2282,11 @@ private: } } if (Style.DerivePointerAlignment) { - Style.PointerAlignment = countVariableAlignments(AnnotatedLines) <= 0 - ? FormatStyle::PAS_Left - : FormatStyle::PAS_Right; + const auto NetRightCount = countVariableAlignments(AnnotatedLines); + if (NetRightCount > 0) + Style.PointerAlignment = FormatStyle::PAS_Right; + else if (NetRightCount < 0) + Style.PointerAlignment = FormatStyle::PAS_Left; Style.ReferenceAlignment = FormatStyle::RAS_Pointer; } if (Style.Standard == FormatStyle::LS_Auto) { diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 4c7c949..6fc538c 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -10781,6 +10781,33 @@ TEST_F(FormatTest, UnderstandsFunctionRefQualification) { format(Prefix + "int* x;", DerivePointerAlignment)); } +TEST_F(FormatTest, PointerAlignmentFallback) { + FormatStyle Style = getLLVMStyle(); + Style.DerivePointerAlignment = true; + + const StringRef Code("int* p;\n" + "int *q;\n" + "int * r;"); + + EXPECT_EQ(Style.PointerAlignment, FormatStyle::PAS_Right); + verifyFormat("int *p;\n" + "int *q;\n" + "int *r;", + Code, Style); + + Style.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("int* p;\n" + "int* q;\n" + "int* r;", + Code, Style); + + Style.PointerAlignment = FormatStyle::PAS_Middle; + verifyFormat("int * p;\n" + "int * q;\n" + "int * r;", + Code, Style); +} + TEST_F(FormatTest, UnderstandsNewAndDelete) { verifyFormat("void f() {\n" " A *a = new A;\n"