llvm-project/clang/test/Lexer
Alex Lorenz 6e2d36b60b Add clang source minimizer that reduces source to directives
that might affect the dependency list for a compilation

This commit introduces a dependency directives source minimizer to clang
that minimizes header and source files to the minimum necessary preprocessor
directives for evaluating includes. It reduces the source down to #define, #include,

The source minimizer works by lexing the input with a custom fast lexer that recognizes
the preprocessor directives it cares about, and emitting those directives in the minimized source.
It ignores source code, comments, and normalizes whitespace. It gives up and fails if seems
any directives that it doesn't recognize as valid (e.g. #define 0).

In addition to the source minimizer this patch adds a
-print-dependency-directives-minimized-source CC1 option that allows you to invoke the minimizer
from clang directly.

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

llvm-svn: 362459
2019-06-03 22:59:17 +00:00
..
Inputs Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import paths. 2016-06-13 20:40:21 +00:00
11-27-2007-FloatLiterals.c
aligned-allocation.cpp [Preprocessor] Allow libc++ to detect when aligned allocation is unavailable. 2018-08-03 23:12:37 +00:00
asm-preproc-no-unicode.s Skip Unicode character expansion in assembly files 2017-04-07 10:13:00 +00:00
badstring_in_if0.c
bcpl-escaped-newline.c
block_cmt_end.c
builtin_redef.c
c90.c
case-insensitive-include-ms.c [clang] Get rid of "%T" expansions 2017-08-15 19:47:06 +00:00
case-insensitive-include-pr31836.sh [clang] Get rid of "%T" expansions 2017-08-15 19:47:06 +00:00
case-insensitive-include.c [clang] Get rid of "%T" expansions 2017-08-15 19:47:06 +00:00
case-insensitive-system-include.c [clang] Get rid of "%T" expansions 2017-08-15 19:47:06 +00:00
char-escapes.c
char-literal-encoding-error.c
char-literal.cpp
char8_t.cpp Implement P0482R2, support for char8_t type. 2018-05-01 05:02:45 +00:00
comment-escape.c
conflict-marker.c
constants.c
coroutines.cpp [coroutines] Rename driver flag -fcoroutines to -fcoroutines-ts 2016-10-02 03:31:58 +00:00
counter.c
cross-windows-on-linux-default.cpp
cross-windows-on-linux.cpp [CMake] Use normalized Windows target triples 2018-08-09 02:16:18 +00:00
cxx-features.cpp Enable coroutines under -std=c++2a. 2019-02-23 21:06:26 +00:00
cxx0x_keyword_as_cxx98.cpp
cxx0x_raw_string_delim_length.cpp
cxx0x_raw_string_directives.cpp
cxx0x_raw_string_unterminated.cpp
cxx1y_binary_literal.cpp
cxx1y_digit_separators.cpp [Lex] Fix handling numerical literals ending with ' and signed exponent. 2018-02-06 22:39:25 +00:00
cxx1z-trigraphs.cpp Do not warn about whitespace between ??/ trigraph and newline in line comments if trigraphs are disabled in the current language. 2017-04-18 21:45:04 +00:00
cxx2a-spaceship.cpp [c++2a] P0515R3: Support for overloaded operator<=>. 2017-12-01 02:13:10 +00:00
cxx2a_keyword_as_cxx17.cpp Enable coroutines under -std=c++2a. 2019-02-23 21:06:26 +00:00
digraph.c [Driver] Add -fno-digraphs 2018-07-17 04:56:22 +00:00
dollar-idents.c
eof-char.c
eof-conflict-marker.c [Lexer] Don't read out of bounds if a conflict marker is at the end of a file 2016-04-01 09:58:45 +00:00
eof-file.c
eof-include.c Factor out repeated code parsing and concatenating header-names from 2019-03-19 01:51:19 +00:00
eof-number.c
eof-string.c
escape_newline.c
gnu-flags.c
half-literal.cpp [NFC] Explicitly add -std=c++14 option to tests that rely on the C++14 default 2019-02-05 12:05:53 +00:00
has_attribute_objc_boxable.m
has_extension.c
has_extension_cxx.cpp
has_feature_address_sanitizer.cpp hwasan: add -fsanitize=kernel-hwaddress flag 2018-04-13 18:05:21 +00:00
has_feature_boxed_nsvalue_expressions.m
has_feature_c1x.c
has_feature_cxx0x.cpp P0426: Make the library implementation of constexpr char_traits a little easier 2017-01-20 00:45:35 +00:00
has_feature_exceptions.cpp
has_feature_memory_sanitizer.cpp [MSan] add KMSAN support to Clang driver 2018-09-07 09:21:09 +00:00
has_feature_modules.m
has_feature_objc_arc.m [ObjC] Allow declaring __strong pointer fields in structs in Objective-C 2018-02-28 07:15:55 +00:00
has_feature_rtti.cpp
has_feature_thread_sanitizer.cpp
has_feature_type_traits.cpp Revert "[Lex] Support more type-traits in __has_feature" 2016-05-24 17:21:42 +00:00
has_feature_undefined_behavior_sanitizer.cpp [Lexer] Add udefined_behavior_sanitizer feature 2018-09-22 01:03:16 +00:00
has_feature_xray_instrument.cpp [Lexer] Add xray_instrument feature 2018-09-17 05:25:47 +00:00
header.cpp
hexfloat.cpp Replace remaining user-visible mentions of C++1z with C++17. 2017-08-13 22:26:53 +00:00
keywords_test.c [MSVC] Recognize `static_assert` keyword in C and C++98 2019-02-15 19:59:45 +00:00
keywords_test.cpp [MSVC] Recognize `static_assert` keyword in C and C++98 2019-02-15 19:59:45 +00:00
long-long.cpp
minimize_source_to_dependency_directives_at_import_extra_tokens.m Add clang source minimizer that reduces source to directives 2019-06-03 22:59:17 +00:00
minimize_source_to_dependency_directives_at_import_missing_semi.m Add clang source minimizer that reduces source to directives 2019-06-03 22:59:17 +00:00
minimize_source_to_dependency_directives_invalid_macro_name.c Add clang source minimizer that reduces source to directives 2019-06-03 22:59:17 +00:00
modules-ts.cpp Add -fmodules-ts flag to cc1 for the provisional C++ modules TS, and mark 2016-07-23 02:32:21 +00:00
ms-compatibility.c
ms-extensions.c
ms-extensions.cpp
msdos-cpm-eof.c Fix test from r256596 2015-12-29 23:23:38 +00:00
multiple-include.c
newline-eof-c++98-compat.cpp
newline-eof.c
newline-nul.c Fix mishandling of escaped newlines followed by newlines or nuls. 2017-04-17 23:44:51 +00:00
null-character-in-literal.c [Lex] Avoid out-of-bounds dereference in LexAngledStringLiteral. 2018-01-12 18:54:35 +00:00
numeric-literal-trash.c
objc_macros.m In Objective-C, ignore attempts to redefine the ARC/GC qualifier macros. 2015-12-10 23:31:01 +00:00
opencl-half-literal.cl [OpenCL] Add supported OpenCL extensions to target info. 2016-05-16 17:06:34 +00:00
pragma-mark.c
pragma-message.c
pragma-message2.c
pragma-operators.cpp
pragma-region.c
preamble.c Allow for unfinished #if blocks in preambles 2017-05-30 11:54:55 +00:00
preamble2.c Allow for unfinished #if blocks in preambles 2017-05-30 11:54:55 +00:00
rdar-8914293.c
rdr-6096838-2.c
rdr-6096838.c
string-literal-encoding.c
string-literal-errors.cpp
string_concat.cpp
token-concat.c
token-concat.cpp
unicode-strings.c
unicode.c Don't emit "will be treated as an identifier character" warning for 2018-09-25 22:34:45 +00:00
unknown-char.c
utf-16.c
utf-16.c.txt
utf8-char-literal.cpp
utf8-invalid.c
warn-date-time.c
warn_binary_literals.cpp
wchar-signedness.c
wchar.c Driver: hoist the `wchar_t` handling to the driver 2017-10-06 23:09:55 +00:00