Index: lib/Format/WhitespaceManager.cpp =================================================================== --- lib/Format/WhitespaceManager.cpp +++ lib/Format/WhitespaceManager.cpp @@ -675,7 +675,7 @@ unsigned FirstTabWidth = Style.TabWidth - WhitespaceStartColumn % Style.TabWidth; // Indent with tabs only when there's at least one full tab. - if (FirstTabWidth + Style.TabWidth <= Spaces) { + if (Style.TabWidth <= Spaces) { Spaces -= FirstTabWidth; Text.append("\t"); } Index: unittests/Format/FormatTest.cpp =================================================================== --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -9367,6 +9367,18 @@ "int oneTwoThree = 123;\n" "int oneTwo = 12;", Alignment)); + // Test with use of tabs for alignment + FormatStyle::UseTabStyle OldTabStyle = Alignment.UseTab; + unsigned OldTabWidth = Alignment.TabWidth; + Alignment.UseTab = FormatStyle::UT_Always; + Alignment.TabWidth = 4; + verifyFormat("int a\t = 42;\n" + "int aa = 42;\n" + "int aaa = 42;\n" + "int aaaa = 42;", + Alignment); + Alignment.UseTab = OldTabStyle; + Alignment.TabWidth = OldTabWidth; Alignment.AlignEscapedNewlines = FormatStyle::ENAS_DontAlign; verifyFormat("#define A \\\n" " int aaaa = 12; \\\n" @@ -9542,6 +9554,18 @@ "unsigned oneTwoThree = 123;\n" "int oneTwo = 12;", Alignment)); + // Test with use of tabs for alignment + FormatStyle::UseTabStyle OldTabStyle = Alignment.UseTab; + unsigned OldTabWidth = Alignment.TabWidth; + Alignment.UseTab = FormatStyle::UT_Always; + Alignment.TabWidth = 4; + verifyFormat("int\t a = 42;\n" + "float b = 42;\n" + "char c = 42;\n" + "double d = 42;", + Alignment); + Alignment.UseTab = OldTabStyle; + Alignment.TabWidth = OldTabWidth; // Function prototype alignment verifyFormat("int a();\n" "double b();",