Author: Michael Kruse Date: 2021-08-01T19:08:13-05:00 New Revision: 0e2586779ca6606a3df085f253a31b89b8ad8508
URL: https://github.com/llvm/llvm-project/commit/0e2586779ca6606a3df085f253a31b89b8ad8508 DIFF: https://github.com/llvm/llvm-project/commit/0e2586779ca6606a3df085f253a31b89b8ad8508.diff LOG: [Preprocessor] Ensure newline after #pragma introduced by -fms-extensions. The -fms-extensions converts __pragma (and _Pragma) into a #pragma that has to occur at the beginning of a line and end with a newline. This patch ensures that the newline after the #pragma is added even if Token::isAtStartOfLine() indicated that we should not start a newline. Committing relying post-commit review since the change is small, some downstream uses might be blocked without this fix, and to make clear the decision of the new -fminimize-whitespace feature (fix on main, revert on clang-13.x branch) suggested by @aaron.ballman in D104601. Differential Revision: https://reviews.llvm.org/D107183 Added: clang/test/Preprocessor/whitespace-ms-extensions.c Modified: clang/lib/Frontend/PrintPreprocessedOutput.cpp Removed: ################################################################################ diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp index 1759485de24db..1a820ad985a4c 100644 --- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp +++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp @@ -646,7 +646,9 @@ void PrintPPOutputPPCallbacks::HandleWhitespaceBeforeTok(const Token &Tok, !Tok.is(tok::annot_module_begin) && !Tok.is(tok::annot_module_end))) return; - if (!RequireSameLine && MoveToLine(Tok, /*RequireStartOfLine=*/false)) { + // EmittedDirectiveOnThisLine takes priority over RequireSameLine. + if ((!RequireSameLine || EmittedDirectiveOnThisLine) && + MoveToLine(Tok, /*RequireStartOfLine=*/EmittedDirectiveOnThisLine)) { if (MinimizeWhitespace) { // Avoid interpreting hash as a directive under -fpreprocessed. if (Tok.is(tok::hash)) diff --git a/clang/test/Preprocessor/whitespace-ms-extensions.c b/clang/test/Preprocessor/whitespace-ms-extensions.c new file mode 100644 index 0000000000000..5fd34fbc6a819 --- /dev/null +++ b/clang/test/Preprocessor/whitespace-ms-extensions.c @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -E -P %s -o - | FileCheck %s +// RUN: %clang_cc1 -E -P -fms-extensions %s -o - | FileCheck %s --check-prefix=MSEXT + +// -fms-extensions changes __pragma into #pragma +// Ensure that there is a newline after the #pragma line. + +#define MACRO \ + text \ + __pragma(PRAGMA) \ + after + +before MACRO text + + +// CHECK: before text __pragma(PRAGMA) after text + +// MSEXT: before text +// MSEXT-NEXT: #pragma PRAGMA +// MSEXT-NEXT: after text _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits