Index: lib/Format/UnwrappedLineFormatter.cpp =================================================================== --- lib/Format/UnwrappedLineFormatter.cpp +++ lib/Format/UnwrappedLineFormatter.cpp @@ -812,13 +812,14 @@ AdditionalIndent); const AnnotatedLine *PreviousLine = nullptr; const AnnotatedLine *NextLine = nullptr; + bool PreviousLineFormatted = false; for (const AnnotatedLine *Line = Joiner.getNextMergedLine(DryRun, IndentTracker); Line; Line = NextLine) { const AnnotatedLine &TheLine = *Line; unsigned Indent = IndentTracker.getIndent(); - bool FixIndentation = - FixBadIndentation && (Indent != TheLine.First->OriginalColumn); + bool FixIndentation = (FixBadIndentation || PreviousLineFormatted) && + Indent != TheLine.First->OriginalColumn; bool ShouldFormat = TheLine.Affected || FixIndentation; // We cannot format this line; if the reason is that the line had a // parsing error, remember that. @@ -845,6 +846,7 @@ else Penalty += OptimizingLineFormatter(Indenter, Whitespaces, Style, this) .formatLine(TheLine, Indent, DryRun); + PreviousLineFormatted = true; } else { // If no token in the current line is affected, we still need to format // affected children. @@ -875,6 +877,7 @@ Whitespaces->addUntouchableToken(*Tok, TheLine.InPPDirective); } NextLine = Joiner.getNextMergedLine(DryRun, IndentTracker); + PreviousLineFormatted = false; } if (!DryRun) markFinalized(TheLine.First); Index: test/Format/adjust-indent.cpp =================================================================== --- /dev/null +++ test/Format/adjust-indent.cpp @@ -0,0 +1,10 @@ +// RUN: grep -Ev "// *[A-Z-]+:" %s | clang-format -lines=2:2 \ +// RUN: | FileCheck -strict-whitespace %s + +void f() { +// CHECK: void f() { +int i; +// CHECK: {{^ int\ i;}} + int j; +// CHECK: {{^ int\ j;}} +} Index: test/Format/line-ranges.cpp =================================================================== --- test/Format/line-ranges.cpp +++ test/Format/line-ranges.cpp @@ -4,8 +4,8 @@ // CHECK: {{^int\ \*i;$}} int*i; -// CHECK: {{^\ \ int\ \ \*\ \ i;$}} - int * i; +// CHECK: {{^int\ \ \*\ \ i;$}} +int * i; -// CHECK: {{^\ \ int\ \*i;$}} - int * i; +// CHECK: {{^int\ \*i;$}} +int * i; Index: test/Format/ranges.cpp =================================================================== --- test/Format/ranges.cpp +++ test/Format/ranges.cpp @@ -2,10 +2,10 @@ // RUN: | clang-format -style=LLVM -offset=2 -length=0 -offset=28 -length=0 \ // RUN: | FileCheck -strict-whitespace %s // CHECK: {{^int\ \*i;$}} - int*i; +int*i; -// CHECK: {{^\ \ int\ \ \*\ \ i;$}} - int * i; +// CHECK: {{^int\ \ \*\ \ i;$}} +int * i; -// CHECK: {{^\ \ int\ \*i;$}} - int * i; +// CHECK: {{^int\ \*i;$}} +int * i; Index: unittests/Format/FormatTestSelective.cpp =================================================================== --- unittests/Format/FormatTestSelective.cpp +++ unittests/Format/FormatTestSelective.cpp @@ -45,8 +45,14 @@ } TEST_F(FormatTestSelective, FormatsCorrectRegionForLeadingWhitespace) { - EXPECT_EQ("int b;\nint a;", format("int b;\n int a;", 7, 0)); - EXPECT_EQ("int b;\n int a;", format("int b;\n int a;", 6, 0)); + EXPECT_EQ("{int b;\n" + " int a;\n" + "}", + format("{int b;\n int a;}", 8, 0)); + EXPECT_EQ("{\n" + " int b;\n" + " int a;}", + format("{int b;\n int a;}", 7, 0)); Style.ColumnLimit = 12; EXPECT_EQ("#define A \\\n" @@ -84,11 +90,11 @@ "template T *getFETokenInfo() const {\n" " return static_cast(FETokenInfo);\n" "}\n" - " int a; // <- Should not be formatted", + "int a; // <- Should not be formatted", format( "template\n" "T *getFETokenInfo() const { return static_cast(FETokenInfo); }\n" - " int a; // <- Should not be formatted", + "int a; // <- Should not be formatted", 9, 5)); } @@ -142,12 +148,12 @@ " // is\n" " // a\n" "\n" - " // This is unrelated", + "//This is unrelated", format("int a; // This\n" " // is\n" " // a\n" "\n" - " // This is unrelated", + "//This is unrelated", 0, 0)); EXPECT_EQ("int a;\n" "// This is\n" @@ -310,13 +316,17 @@ EXPECT_EQ("{\n" "{\n" " a;\n" - "b;\n" + " b;\n" + " c;\n" + " d;\n" "}\n" "}", format("{\n" "{\n" " a;\n" - "b;\n" + " b;\n" + " c;\n" + " d;\n" "}\n" "}", 9, 2));