dang updated this revision to Diff 281614. dang added a comment. Ensure that the default value is assigned even if the option should not get parsed.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D84674/new/ https://reviews.llvm.org/D84674 Files: clang/include/clang/Driver/Options.td clang/lib/Frontend/CompilerInvocation.cpp llvm/include/llvm/Option/OptParser.td llvm/utils/TableGen/OptParserEmitter.cpp
Index: llvm/utils/TableGen/OptParserEmitter.cpp =================================================================== --- llvm/utils/TableGen/OptParserEmitter.cpp +++ llvm/utils/TableGen/OptParserEmitter.cpp @@ -66,6 +66,7 @@ const char *MacroName; const Record &R; bool ShouldAlwaysEmit; + StringRef ShouldParse; StringRef KeyPath; StringRef DefaultValue; StringRef NormalizedValuesScope; @@ -107,6 +108,8 @@ OS << ", "; OS << ShouldAlwaysEmit; OS << ", "; + OS << ShouldParse; + OS << ", "; OS << KeyPath; OS << ", "; emitScopedNormalizedValue(OS, DefaultValue); @@ -194,6 +197,7 @@ } Ret->ShouldAlwaysEmit = R.getValueAsBit("ShouldAlwaysEmit"); + Ret->ShouldParse = R.getValueAsString("ShouldParse"); Ret->KeyPath = R.getValueAsString("KeyPath"); Ret->DefaultValue = R.getValueAsString("DefaultValue"); Ret->NormalizedValuesScope = R.getValueAsString("NormalizedValuesScope"); Index: llvm/include/llvm/Option/OptParser.td =================================================================== --- llvm/include/llvm/Option/OptParser.td +++ llvm/include/llvm/Option/OptParser.td @@ -102,6 +102,7 @@ code KeyPath = ?; code DefaultValue = ?; bit ShouldAlwaysEmit = 0; + code ShouldParse = "true"; code NormalizedValuesScope = ""; code Normalizer = ""; code Denormalizer = ""; @@ -201,6 +202,7 @@ class ValueMerger<code merger> { code ValueMerger = merger; } class ValueExtractor<code extractor> { code ValueExtractor = extractor; } class DiagnosticArg { bit IsDiagnosticArg = 1; } +class ShouldParseIf<code shouldparse> { code ShouldParse = shouldparse; } // Predefined options. Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -1260,29 +1260,25 @@ #define DIAG_OPTION_WITH_MARSHALLING( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ - { \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + Opts.KEYPATH = MERGER(Opts.KEYPATH, DEFAULT_VALUE); \ + if (SHOULD_PARSE) \ if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, Diags)) \ Opts.KEYPATH = MERGER(Opts.KEYPATH, \ - static_cast<decltype(Opts.KEYPATH)>(*MaybeValue)); \ - else \ - Opts.KEYPATH = MERGER(Opts.KEYPATH, DEFAULT_VALUE); \ - } + static_cast<decltype(Opts.KEYPATH)>(*MaybeValue)); #define DIAG_OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ - NEG_SPELLING) \ - { \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, \ + NEG_ID, NEG_SPELLING) \ + Opts.KEYPATH = MERGER(Opts.KEYPATH, DEFAULT_VALUE); \ + if (SHOULD_PARSE) \ if (auto MaybeValue = \ NORMALIZER(OPT_##ID, OPT_##NEG_ID, TABLE_INDEX, Args, Diags)) \ Opts.KEYPATH = MERGER(Opts.KEYPATH, \ - static_cast<decltype(Opts.KEYPATH)>(*MaybeValue)); \ - else \ - Opts.KEYPATH = MERGER(Opts.KEYPATH, DEFAULT_VALUE); \ - } + static_cast<decltype(Opts.KEYPATH)>(*MaybeValue)); #include "clang/Driver/Options.inc" #undef DIAG_OPTION_WITH_MARSHALLING_BOOLEAN @@ -2065,21 +2061,6 @@ } Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device); - if (Opts.SYCL) { - // -sycl-std applies to any SYCL source, not only those containing kernels, - // but also those using the SYCL API - if (const Arg *A = Args.getLastArg(OPT_sycl_std_EQ)) { - Opts.SYCLVersion = llvm::StringSwitch<unsigned>(A->getValue()) - .Cases("2017", "1.2.1", "121", "sycl-1.2.1", 2017) - .Default(0U); - - if (Opts.SYCLVersion == 0U) { - // User has passed an invalid value to the flag, this is an error - Diags.Report(diag::err_drv_invalid_value) - << A->getAsString(Args) << A->getValue(); - } - } - } llvm::Triple T(TargetOpts.Triple); CompilerInvocation::setLangDefaults(Opts, IK, T, PPOpts, LangStd); @@ -2720,29 +2701,25 @@ DiagnosticsEngine &Diags) { #define OPTION_WITH_MARSHALLING( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ - { \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \ + if (SHOULD_PARSE) \ if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, &Diags)) \ this->KEYPATH = MERGER( \ - this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); \ - else \ - this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \ - } + this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); #define OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ - NEG_SPELLING) \ - { \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, \ + NEG_ID, NEG_SPELLING) \ + this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \ + if (SHOULD_PARSE) \ if (auto MaybeValue = \ NORMALIZER(OPT_##ID, OPT_##NEG_ID, TABLE_INDEX, Args, &Diags)) \ this->KEYPATH = MERGER( \ - this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); \ - else \ - this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \ - } + this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); #include "clang/Driver/Options.inc" #undef OPTION_WITH_MARSHALLING_BOOLEAN @@ -2988,8 +2965,8 @@ SmallVectorImpl<const char *> &Args, StringAllocator SA) const { #define OPTION_WITH_MARSHALLING( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ if ((FLAGS)&options::CC1Option) { \ const auto &Extracted = EXTRACTOR(this->KEYPATH); \ if (ALWAYS_EMIT || \ @@ -3000,9 +2977,9 @@ #define OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ - NEG_SPELLING) \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, \ + NEG_ID, NEG_SPELLING) \ if ((FLAGS)&options::CC1Option) { \ const auto &Extracted = EXTRACTOR(this->KEYPATH); \ if (ALWAYS_EMIT || \ @@ -3012,22 +2989,22 @@ #define DIAG_OPTION_WITH_MARSHALLING( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ OPTION_WITH_MARSHALLING(PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, \ ALIASARGS, FLAGS, PARAM, HELPTEXT, METAVAR, VALUES, \ - SPELLING, ALWAYS_EMIT, DiagnosticOpts->KEYPATH, \ - DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, \ - EXTRACTOR, TABLE_INDEX) + SPELLING, ALWAYS_EMIT, SHOULD_PARSE, \ + DiagnosticOpts->KEYPATH, DEFAULT_VALUE, NORMALIZER, \ + DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) #define DIAG_OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ - NEG_SPELLING) \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, KEYPATH, \ + DEFAULT_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, \ + NEG_ID, NEG_SPELLING) \ OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, \ + HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, SHOULD_PARSE, \ DiagnosticOpts->KEYPATH, DEFAULT_VALUE, NORMALIZER, DENORMALIZER, \ MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, NEG_SPELLING) Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1700,6 +1700,11 @@ // Should this actually be enforced in CC1 HelpText<"Force double to be 32 bits or 64 bits">, MarshallingInfoStringInt<"LangOpts->DoubleSize", "0">; +def sycl_std_EQ : Joined<["-"], "sycl-std=">, Group<sycl_Group>, Flags<[CC1Option, NoArgumentUnused, CoreOption]>, + HelpText<"SYCL language standard to compile for.">, Values<"2017,121,1.2.1,sycl-1.2.1">, + MarshallingInfoString<"LangOpts->SYCLVersion", "0">, + NormalizedValues<["2017", "2017", "2017", "2017"]>, AutoNormalizeEnum, + ShouldParseIf<"LangOpts->SYCL">; let Flags = [CC1Option, CC1AsOption, NoDriverOption] in { @@ -4375,10 +4380,6 @@ defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>; defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>; -// C++ SYCL options -def sycl_std_EQ : Joined<["-"], "sycl-std=">, Group<sycl_Group>, Flags<[CC1Option, NoArgumentUnused, CoreOption]>, - HelpText<"SYCL language standard to compile for.">, Values<"2017, 121, 1.2.1, sycl-1.2.1">; - //===----------------------------------------------------------------------===// // CC1 Options //===----------------------------------------------------------------------===//
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits