mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 11:06:39 +00:00

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
46 lines
1.2 KiB
C
46 lines
1.2 KiB
C
// RUN: %clang_cc1 -E %s | FileCheck --strict-whitespace %s
|
|
// RUN: %clang_cc1 -E -P -fminimize-whitespace %s | FileCheck --strict-whitespace %s --check-prefix=MINWS
|
|
|
|
#define FOO1()
|
|
#define FOO2(x)x
|
|
#define FOO3(x) x
|
|
#define FOO4(x)x x
|
|
#define FOO5(x) x x
|
|
#define FOO6(x) [x]
|
|
#define FOO7(x) [ x]
|
|
#define FOO8(x) [x ]
|
|
|
|
#define TEST(FOO,x) FOO <FOO()> < FOO()> <FOO ()> <FOO( )> <FOO() > <FOO()x> <FOO() x> < FOO()x>
|
|
|
|
TEST(FOO1,)
|
|
// CHECK: FOO1 <> < > <> <> < > <> < > < >
|
|
// MINWS: FOO1<><><><><><><><>
|
|
|
|
TEST(FOO2,)
|
|
// CHECK: FOO2 <> < > <> <> < > <> < > < >
|
|
// MINWS-SAME: FOO2<><><><><><><><>
|
|
|
|
TEST(FOO3,)
|
|
// CHECK: FOO3 <> < > <> <> < > <> < > < >
|
|
// MINWS-SAME: FOO3<><><><><><><><>
|
|
|
|
TEST(FOO4,)
|
|
// CHECK: FOO4 < > < > < > < > < > < > < > < >
|
|
// MINWS-SAME: FOO4<><><><><><><><>
|
|
|
|
TEST(FOO5,)
|
|
// CHECK: FOO5 < > < > < > < > < > < > < > < >
|
|
// MINWS-SAME: FOO5<><><><><><><><>
|
|
|
|
TEST(FOO6,)
|
|
// CHECK: FOO6 <[]> < []> <[]> <[]> <[] > <[]> <[] > < []>
|
|
// MINWS-SAME: FOO6<[]><[]><[]><[]><[]><[]><[]><[]>
|
|
|
|
TEST(FOO7,)
|
|
// CHECK: FOO7 <[ ]> < [ ]> <[ ]> <[ ]> <[ ] > <[ ]> <[ ] > < [ ]>
|
|
// MINWS-SAME: FOO7<[]><[]><[]><[]><[]><[]><[]><[]>
|
|
|
|
TEST(FOO8,)
|
|
// CHECK: FOO8 <[ ]> < [ ]> <[ ]> <[ ]> <[ ] > <[ ]> <[ ] > < [ ]>
|
|
// MINWS-SAME: FOO8<[]><[]><[]><[]><[]><[]><[]><[]>
|