Skip to content

Commit 05127fb

Browse files
committed
[clang][cli] Parse HeaderSearch options separately
This patch moves parsing of header search options from `parseSimpleArgs` back to `ParseHeaderSearchArgs` where they originally were. The round-trip algorithm in D94472 requires this separation to be able to run parsing and generating **only** for the options that need to be tested via round-tripping. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D94802
1 parent 9ad94c1 commit 05127fb

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ class DependencyOutputOpts<string base>
256256
class CodeGenOpts<string base>
257257
: KeyPathAndMacro<"CodeGenOpts.", base, "CODEGEN_"> {}
258258
class HeaderSearchOpts<string base>
259-
: KeyPathAndMacro<"HeaderSearchOpts->", base> {}
259+
: KeyPathAndMacro<"HeaderSearchOpts->", base, "HEADER_SEARCH_"> {}
260260
class PreprocessorOpts<string base>
261261
: KeyPathAndMacro<"PreprocessorOpts->", base> {}
262262
class FileSystemOpts<string base>

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1827,7 +1827,23 @@ std::string CompilerInvocation::GetResourcesPath(const char *Argv0,
18271827
}
18281828

18291829
static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args,
1830+
DiagnosticsEngine &Diags,
18301831
const std::string &WorkingDir) {
1832+
HeaderSearchOptions *HeaderSearchOpts = &Opts;
1833+
bool Success = true;
1834+
1835+
#define HEADER_SEARCH_OPTION_WITH_MARSHALLING( \
1836+
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
1837+
HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
1838+
DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
1839+
MERGER, EXTRACTOR, TABLE_INDEX) \
1840+
PARSE_OPTION_WITH_MARSHALLING(Args, Diags, Success, ID, FLAGS, PARAM, \
1841+
SHOULD_PARSE, KEYPATH, DEFAULT_VALUE, \
1842+
IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
1843+
MERGER, TABLE_INDEX)
1844+
#include "clang/Driver/Options.inc"
1845+
#undef HEADER_SEARCH_OPTION_WITH_MARSHALLING
1846+
18311847
if (const Arg *A = Args.getLastArg(OPT_stdlib_EQ))
18321848
Opts.UseLibcxx = (strcmp(A->getValue(), "libc++") == 0);
18331849

@@ -2774,7 +2790,7 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
27742790
LangOpts.IsHeaderFile);
27752791
ParseTargetArgs(Res.getTargetOpts(), Args, Diags);
27762792
llvm::Triple T(Res.getTargetOpts().Triple);
2777-
ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), Args,
2793+
ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), Args, Diags,
27782794
Res.getFileSystemOpts().WorkingDir);
27792795
if (DashX.getFormat() == InputKind::Precompiled ||
27802796
DashX.getLanguage() == Language::LLVM_IR) {
@@ -2995,13 +3011,15 @@ void CompilerInvocation::generateCC1CommandLine(
29953011
EXTRACTOR, TABLE_INDEX)
29963012

29973013
#define DIAG_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3014+
#define HEADER_SEARCH_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
29983015
#define LANG_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
29993016
#define CODEGEN_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
30003017

30013018
#include "clang/Driver/Options.inc"
30023019

30033020
#undef CODEGEN_OPTION_WITH_MARSHALLING
30043021
#undef LANG_OPTION_WITH_MARSHALLING
3022+
#undef HEADER_SEARCH_OPTION_WITH_MARSHALLING
30053023
#undef DIAG_OPTION_WITH_MARSHALLING
30063024
#undef OPTION_WITH_MARSHALLING
30073025
#undef GENERATE_OPTION_WITH_MARSHALLING

0 commit comments

Comments
 (0)