[all-commits] [llvm/llvm-project] ae6b40: [Preprocessor] Implement -fminimize-whitespace.

Michael Kruse via All-commits all-commits at lists.llvm.org
Sun Jul 25 21:39:24 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: ae6b40000238e5faaaa319ffcfc713a15e459be8
      https://github.com/llvm/llvm-project/commit/ae6b40000238e5faaaa319ffcfc713a15e459be8
  Author: Michael Kruse <llvm-project at meinersbur.de>
  Date:   2021-07-25 (Sun, 25 Jul 2021)

  Changed paths:
    M clang/docs/ClangCommandLineReference.rst
    M clang/include/clang/Basic/DiagnosticDriverKinds.td
    M clang/include/clang/Driver/Options.td
    M clang/include/clang/Driver/Types.h
    M clang/include/clang/Frontend/PreprocessorOutputOptions.h
    M clang/lib/Driver/ToolChains/Clang.cpp
    M clang/lib/Driver/Types.cpp
    M clang/lib/Frontend/PrintPreprocessedOutput.cpp
    M clang/lib/Lex/Preprocessor.cpp
    M clang/test/Preprocessor/comment_save.c
    M clang/test/Preprocessor/first-line-indent.c
    M clang/test/Preprocessor/hash_line.c
    A clang/test/Preprocessor/line-directive-output-mincol.c
    M clang/test/Preprocessor/line-directive-output.c
    M clang/test/Preprocessor/macro_space.c
    A clang/test/Preprocessor/minimize-whitespace-messages.c
    A clang/test/Preprocessor/minimize-whitespace.c
    M clang/test/Preprocessor/print_line_include.c
    M clang/test/Preprocessor/stringize_space.c

  Log Message:
  -----------
  [Preprocessor] Implement -fminimize-whitespace.

This patch adds the -fminimize-whitespace with the following effects:

 * If combined with -E, remove as much non-line-breaking whitespace as
   possible.

 * If combined with -E -P, removes as much whitespace as possible,
   including line-breaks.

The motivation is to reduce the amount of insignificant changes in the
preprocessed output with source files where only whitespace has been
changed (add/remove comments, clang-format, etc.) which is in particular
useful with ccache.

A patch for ccache for using this flag has been proposed to ccache as well:
https://github.com/ccache/ccache/pull/815, which will use
-fnormalize-whitespace when clang-13 has been detected, and additionally
uses -P in "unify_mode". ccache already had a unify_mode in an older
version which was removed because of problems that using the
preprocessor itself does not have (such that the custom tokenizer did
not recognize C++11 raw strings).

This patch slightly reorganizes which part is responsible for adding
newlines that are required for semantics. It is now either
startNewLineIfNeeded() or MoveToLine() but never both; this avoids the
ShouldUpdateCurrentLine workaround and avoids redundant lines being
inserted in some cases. It also fixes a mandatory newline not inserted
after a _Pragma("...") that is expanded into a #pragma.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D104601




More information about the All-commits mailing list