diff --git a/clang/lib/Frontend/TextDiagnostic.cpp b/clang/lib/Frontend/TextDiagnostic.cpp index d285b8873977e..d2cbb55dea876 100644 --- a/clang/lib/Frontend/TextDiagnostic.cpp +++ b/clang/lib/Frontend/TextDiagnostic.cpp @@ -1225,7 +1225,7 @@ void TextDiagnostic::emitSnippetAndCaret( // to produce easily machine parsable output. Add a space before the // source line and the caret to make it trivial to tell the main diagnostic // line from what the user is intended to see. - if (DiagOpts->ShowSourceRanges) { + if (DiagOpts->ShowSourceRanges && !SourceLine.empty()) { SourceLine = ' ' + SourceLine; CaretLine = ' ' + CaretLine; } @@ -1262,9 +1262,6 @@ void TextDiagnostic::emitSnippetAndCaret( void TextDiagnostic::emitSnippet(StringRef SourceLine, unsigned MaxLineNoDisplayWidth, unsigned LineNo) { - if (SourceLine.empty()) - return; - // Emit line number. if (MaxLineNoDisplayWidth > 0) { unsigned LineNoDisplayWidth = getNumDisplayWidth(LineNo); diff --git a/clang/test/Misc/diag-style.cpp b/clang/test/Misc/diag-style.cpp new file mode 100644 index 0000000000000..b12afb2cd9238 --- /dev/null +++ b/clang/test/Misc/diag-style.cpp @@ -0,0 +1,12 @@ +// RUN: not %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck -strict-whitespace %s + +/// empty lines in multi-line diagnostic snippets are preserved. +static_assert(false && + + true, ""); +// CHECK: static assertion failed +// CHECK-NEXT: {{^}} 4 | static_assert(false &&{{$}} +// CHECK-NEXT: {{^}} | ^~~~~~~~{{$}} +// CHECK-NEXT: {{^}} 5 | {{$}} +// CHECK-NEXT: {{^}} 6 | true, "");{{$}} +// CHECK-NEXT: {{^}} | ~~~~{{$}}