@@ -400,6 +400,23 @@ static T extractMaskValue(T KeyPath) {
400
400
MERGER (KEYPATH, static_cast <decltype (KEYPATH)>(*MaybeValue)); \
401
401
}
402
402
403
+ // Capture the extracted value as a lambda argument to avoid potential issues
404
+ // with lifetime extension of the reference.
405
+ #define GENERATE_OPTION_WITH_MARSHALLING ( \
406
+ ARGS, STRING_ALLOCATOR, KIND, FLAGS, SPELLING, ALWAYS_EMIT, KEYPATH, \
407
+ DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, DENORMALIZER, EXTRACTOR, \
408
+ TABLE_INDEX) \
409
+ if ((FLAGS)&options::CC1Option) { \
410
+ [&](const auto &Extracted) { \
411
+ if (ALWAYS_EMIT || \
412
+ (Extracted != \
413
+ static_cast <decltype (KEYPATH)>((IMPLIED_CHECK) ? (IMPLIED_VALUE) \
414
+ : (DEFAULT_VALUE)))) \
415
+ DENORMALIZER (ARGS, SPELLING, STRING_ALLOCATOR, Option::KIND##Class, \
416
+ TABLE_INDEX, Extracted); \
417
+ }(EXTRACTOR (KEYPATH)); \
418
+ }
419
+
403
420
static const StringRef GetInputKindName (InputKind IK);
404
421
405
422
static void FixupInvocation (CompilerInvocation &Invocation,
@@ -1826,6 +1843,22 @@ std::string CompilerInvocation::GetResourcesPath(const char *Argv0,
1826
1843
return Driver::GetResourcesPath (ClangExecutable, CLANG_RESOURCE_DIR);
1827
1844
}
1828
1845
1846
+ static void GenerateHeaderSearchArgs (const HeaderSearchOptions &Opts,
1847
+ SmallVectorImpl<const char *> &Args,
1848
+ CompilerInvocation::StringAllocator SA) {
1849
+ const HeaderSearchOptions *HeaderSearchOpts = &Opts;
1850
+ #define HEADER_SEARCH_OPTION_WITH_MARSHALLING ( \
1851
+ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
1852
+ HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
1853
+ DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
1854
+ MERGER, EXTRACTOR, TABLE_INDEX) \
1855
+ GENERATE_OPTION_WITH_MARSHALLING ( \
1856
+ Args, SA, KIND, FLAGS, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
1857
+ IMPLIED_CHECK, IMPLIED_VALUE, DENORMALIZER, EXTRACTOR, TABLE_INDEX)
1858
+ #include " clang/Driver/Options.inc"
1859
+ #undef HEADER_SEARCH_OPTION_WITH_MARSHALLING
1860
+ }
1861
+
1829
1862
static void ParseHeaderSearchArgs (HeaderSearchOptions &Opts, ArgList &Args,
1830
1863
DiagnosticsEngine &Diags,
1831
1864
const std::string &WorkingDir) {
@@ -2983,23 +3016,6 @@ std::string CompilerInvocation::getModuleHash() const {
2983
3016
2984
3017
void CompilerInvocation::generateCC1CommandLine (
2985
3018
SmallVectorImpl<const char *> &Args, StringAllocator SA) const {
2986
- // Capture the extracted value as a lambda argument to avoid potential issues
2987
- // with lifetime extension of the reference.
2988
- #define GENERATE_OPTION_WITH_MARSHALLING ( \
2989
- ARGS, STRING_ALLOCATOR, KIND, FLAGS, SPELLING, ALWAYS_EMIT, KEYPATH, \
2990
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, DENORMALIZER, EXTRACTOR, \
2991
- TABLE_INDEX) \
2992
- if ((FLAGS)&options::CC1Option) { \
2993
- [&](const auto &Extracted) { \
2994
- if (ALWAYS_EMIT || \
2995
- (Extracted != \
2996
- static_cast <decltype (KEYPATH)>((IMPLIED_CHECK) ? (IMPLIED_VALUE) \
2997
- : (DEFAULT_VALUE)))) \
2998
- DENORMALIZER (ARGS, SPELLING, STRING_ALLOCATOR, Option::KIND##Class, \
2999
- TABLE_INDEX, Extracted); \
3000
- }(EXTRACTOR (KEYPATH)); \
3001
- }
3002
-
3003
3019
#define OPTION_WITH_MARSHALLING ( \
3004
3020
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
3005
3021
HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
@@ -3011,19 +3027,17 @@ void CompilerInvocation::generateCC1CommandLine(
3011
3027
EXTRACTOR, TABLE_INDEX)
3012
3028
3013
3029
#define DIAG_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3014
- #define HEADER_SEARCH_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3015
3030
#define LANG_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3016
3031
#define CODEGEN_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3017
3032
3018
3033
#include " clang/Driver/Options.inc"
3019
3034
3020
3035
#undef CODEGEN_OPTION_WITH_MARSHALLING
3021
3036
#undef LANG_OPTION_WITH_MARSHALLING
3022
- #undef HEADER_SEARCH_OPTION_WITH_MARSHALLING
3023
3037
#undef DIAG_OPTION_WITH_MARSHALLING
3024
3038
#undef OPTION_WITH_MARSHALLING
3025
- #undef GENERATE_OPTION_WITH_MARSHALLING
3026
3039
3040
+ GenerateHeaderSearchArgs (*HeaderSearchOpts, Args, SA);
3027
3041
GenerateLangArgs (*LangOpts, Args, SA);
3028
3042
}
3029
3043
0 commit comments