diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3463,7 +3463,7 @@ HelpText<"Target specific attributes">; def triple : Separate<["-"], "triple">, HelpText<"Specify target triple (e.g. i686-apple-darwin9)">, - MarshallingInfoString<"TargetOpts->Triple", "llvm::sys::getDefaultTargetTriple()", "std::string">, + MarshallingInfoString<"TargetOpts->Triple", "llvm::sys::getDefaultTargetTriple()">, AlwaysEmit, Normalizer<"normalizeTriple">, DenormalizeString; def target_abi : Separate<["-"], "target-abi">, HelpText<"Target a particular ABI type">; @@ -3656,7 +3656,7 @@ HelpText<"The relocation model to use">, Values<"static,pic,ropi,rwpi,ropi-rwpi,dynamic-no-pic">, NormalizedValuesScope<"llvm::Reloc">, NormalizedValues<["Static", "PIC_", "ROPI", "RWPI", "ROPI_RWPI", "DynamicNoPIC"]>, - MarshallingInfoString<"CodeGenOpts.RelocationModel", "PIC_", "llvm::Reloc::Model">, + MarshallingInfoString<"CodeGenOpts.RelocationModel", "PIC_">, AutoNormalizeEnum; def fno_math_builtin : Flag<["-"], "fno-math-builtin">, HelpText<"Disable implicit builtin knowledge of math functions">; @@ -4101,7 +4101,7 @@ HelpText<"The ARC migration action to take">, Values<"check,modify,migrate">, NormalizedValuesScope<"FrontendOptions">, NormalizedValues<["ARCMT_Check", "ARCMT_Modify", "ARCMT_Migrate"]>, - MarshallingInfoString<"FrontendOpts.ARCMTAction", "ARCMT_None", "unsigned">, + MarshallingInfoString<"FrontendOpts.ARCMTAction", "ARCMT_None">, AutoNormalizeEnumJoined; def opt_record_file : Separate<["-"], "opt-record-file">, diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -260,7 +260,7 @@ template static T mergeForwardValue(T KeyPath, U Value) { - return static_cast(Value); + return Value; } template static T mergeMaskValue(T KeyPath, U Value) { @@ -3662,10 +3662,11 @@ #define OPTION_WITH_MARSHALLING( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - TYPE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ { \ if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, Diags)) \ - this->KEYPATH = MERGER(this->KEYPATH, static_cast(*MaybeValue)); \ + this->KEYPATH = MERGER( \ + this->KEYPATH, static_castKEYPATH)>(*MaybeValue)); \ else \ this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \ } @@ -3673,12 +3674,13 @@ #define OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - TYPE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ + NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ NEG_SPELLING) \ { \ if (auto MaybeValue = \ NORMALIZER(OPT_##ID, OPT_##NEG_ID, TABLE_INDEX, Args, Diags)) \ - this->KEYPATH = MERGER(this->KEYPATH, static_cast(*MaybeValue)); \ + this->KEYPATH = MERGER( \ + this->KEYPATH, static_castKEYPATH)>(*MaybeValue)); \ else \ this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \ } @@ -3937,7 +3939,7 @@ #define OPTION_WITH_MARSHALLING( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - TYPE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ if ((FLAGS)&options::CC1Option) { \ const auto &Extracted = EXTRACTOR(this->KEYPATH); \ if (ALWAYS_EMIT || Extracted != DEFAULT_VALUE) \ @@ -3947,7 +3949,7 @@ #define OPTION_WITH_MARSHALLING_BOOLEAN( \ PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ - TYPE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ + NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX, NEG_ID, \ NEG_SPELLING) \ if ((FLAGS)&options::CC1Option) { \ const auto &Extracted = EXTRACTOR(this->KEYPATH); \ diff --git a/llvm/include/llvm/Option/OptParser.td b/llvm/include/llvm/Option/OptParser.td --- a/llvm/include/llvm/Option/OptParser.td +++ b/llvm/include/llvm/Option/OptParser.td @@ -151,19 +151,16 @@ code DefaultValue = defaultvalue; } -class MarshallingInfoString - : MarshallingInfo { - code NormalizerRetTy = normalizerretty; -} +class MarshallingInfoString + : MarshallingInfo {} -class MarshallingInfoFlag +class MarshallingInfoFlag : MarshallingInfo { - code NormalizerRetTy = ty; code Normalizer = "normalizeSimpleFlag"; code Denormalizer = "denormalizeSimpleFlag"; } -class MarshallingInfoBitfieldFlag : MarshallingInfoFlag { +class MarshallingInfoBitfieldFlag : MarshallingInfoFlag { code Normalizer = "(normalizeFlagToValue)"; code ValueMerger = "mergeMaskValue"; code ValueExtractor = "(extractMaskValue)"; diff --git a/llvm/utils/TableGen/OptParserEmitter.cpp b/llvm/utils/TableGen/OptParserEmitter.cpp --- a/llvm/utils/TableGen/OptParserEmitter.cpp +++ b/llvm/utils/TableGen/OptParserEmitter.cpp @@ -69,7 +69,6 @@ StringRef KeyPath; StringRef DefaultValue; StringRef NormalizedValuesScope; - StringRef NormalizerRetTy; StringRef Normalizer; StringRef Denormalizer; StringRef ValueMerger; @@ -112,8 +111,6 @@ OS << ", "; emitScopedNormalizedValue(OS, DefaultValue); OS << ", "; - OS << NormalizerRetTy; - OS << ", "; OS << Normalizer; OS << ", "; OS << Denormalizer; @@ -172,9 +169,9 @@ static MarshallingInfo::Ptr createMarshallingInfo(const Record &R) { assert(!isa(R.getValueInit("KeyPath")) && !isa(R.getValueInit("DefaultValue")) && - !isa(R.getValueInit("NormalizerRetTy")) && !isa(R.getValueInit("ValueMerger")) && - "MarshallingInfo must have a type"); + "MarshallingInfo must have a provide a keypath, default value and a " + "value merger"); MarshallingInfo::Ptr Ret; if (Record *MaybeNegOption = R.getValueAsOptionalDef("NegOption")) { @@ -187,7 +184,6 @@ Ret->KeyPath = R.getValueAsString("KeyPath"); Ret->DefaultValue = R.getValueAsString("DefaultValue"); Ret->NormalizedValuesScope = R.getValueAsString("NormalizedValuesScope"); - Ret->NormalizerRetTy = R.getValueAsString("NormalizerRetTy"); Ret->Normalizer = R.getValueAsString("Normalizer"); Ret->Denormalizer = R.getValueAsString("Denormalizer");