curdeius created this revision. curdeius added reviewers: HazardyKnusperkeks, owenpan, MyDeveloperDay. Herald added a project: All. curdeius requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Fixes https://github.com/llvm/llvm-project/issues/55407. Given configuration: UseTab: Always PointerAlignment: Right AlignConsecutiveDeclarations: true Before, the pointer was misaligned in this code: void f() { unsigned long long big; char *ptr; // misaligned int i; } That was due to the fact that when handling right-aligned pointers, the Spaces were changed but StartOfTokenColumn was not. Also, a tab was used not only for indentation but for spacing too when using `UseTab: ForIndentation` config option: void f() { unsigned long long big; char *ptr; // \t after char int i; } Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D125528 Files: clang/lib/Format/WhitespaceManager.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -14161,6 +14161,21 @@ "int bbbbbbbb; // x\n", Tab); + FormatStyle TabAlignment = Tab; + TabAlignment.AlignConsecutiveDeclarations.Enabled = true; + TabAlignment.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("unsigned long long big;\n" + "char*\t\t ptr;", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Middle; + verifyFormat("unsigned long long big;\n" + "char *\t\t ptr;", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("unsigned long long big;\n" + "char\t\t *ptr;", + TabAlignment); + Tab.TabWidth = 4; Tab.IndentWidth = 8; verifyFormat("class TabWidth4Indent8 {\n" @@ -14203,6 +14218,27 @@ " \t */", Tab)); + TabAlignment.UseTab = FormatStyle::UT_ForIndentation; + TabAlignment.AlignConsecutiveDeclarations.Enabled = true; + TabAlignment.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("void f() {\n" + "\tunsigned long long big;\n" + "\tchar* ptr;\n" + "}", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Middle; + verifyFormat("void f() {\n" + "\tunsigned long long big;\n" + "\tchar * ptr;\n" + "}", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("void f() {\n" + "\tunsigned long long big;\n" + "\tchar *ptr;\n" + "}", + TabAlignment); + Tab.UseTab = FormatStyle::UT_ForIndentation; verifyFormat("{\n" "\taaaaaaaaaaaaaaaaaaaaaaaaaaaa();\n" Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -432,6 +432,7 @@ --Previous) { Changes[Previous + 1].Spaces -= Shift; Changes[Previous].Spaces += Shift; + Changes[Previous].StartOfTokenColumn += Shift; } } }
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -14161,6 +14161,21 @@ "int bbbbbbbb; // x\n", Tab); + FormatStyle TabAlignment = Tab; + TabAlignment.AlignConsecutiveDeclarations.Enabled = true; + TabAlignment.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("unsigned long long big;\n" + "char*\t\t ptr;", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Middle; + verifyFormat("unsigned long long big;\n" + "char *\t\t ptr;", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("unsigned long long big;\n" + "char\t\t *ptr;", + TabAlignment); + Tab.TabWidth = 4; Tab.IndentWidth = 8; verifyFormat("class TabWidth4Indent8 {\n" @@ -14203,6 +14218,27 @@ " \t */", Tab)); + TabAlignment.UseTab = FormatStyle::UT_ForIndentation; + TabAlignment.AlignConsecutiveDeclarations.Enabled = true; + TabAlignment.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("void f() {\n" + "\tunsigned long long big;\n" + "\tchar* ptr;\n" + "}", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Middle; + verifyFormat("void f() {\n" + "\tunsigned long long big;\n" + "\tchar * ptr;\n" + "}", + TabAlignment); + TabAlignment.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("void f() {\n" + "\tunsigned long long big;\n" + "\tchar *ptr;\n" + "}", + TabAlignment); + Tab.UseTab = FormatStyle::UT_ForIndentation; verifyFormat("{\n" "\taaaaaaaaaaaaaaaaaaaaaaaaaaaa();\n" Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -432,6 +432,7 @@ --Previous) { Changes[Previous + 1].Spaces -= Shift; Changes[Previous].Spaces += Shift; + Changes[Previous].StartOfTokenColumn += Shift; } } }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits