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 @@ -3933,7 +3933,7 @@ def triple : Separate<["-"], "triple">, HelpText<"Specify target triple (e.g. i686-apple-darwin9)">, MarshallingInfoString<"TargetOpts->Triple", "llvm::Triple::normalize(llvm::sys::getDefaultTargetTriple())">, - AlwaysEmit, Normalizer<"normalizeTriple">, DenormalizeString; + AlwaysEmit, Normalizer<"normalizeTriple">; def target_abi : Separate<["-"], "target-abi">, HelpText<"Target a particular ABI type">; def target_sdk_version_EQ : Joined<["-"], "target-sdk-version=">, @@ -3998,7 +3998,8 @@ HelpText<"Display exploded graph using GraphViz">, MarshallingInfoFlag<"AnalyzerOpts->visualizeExplodedGraphWithGraphViz">; def analyzer_dump_egraph : Separate<["-"], "analyzer-dump-egraph">, - HelpText<"Dump exploded graph to the specified file">; + HelpText<"Dump exploded graph to the specified file">, + MarshallingInfoString<"AnalyzerOpts->DumpExplodedGraphTo">; def analyzer_dump_egraph_EQ : Joined<["-"], "analyzer-dump-egraph=">, Alias; def analyzer_inline_max_stack_depth : Separate<["-"], "analyzer-inline-max-stack-depth">, 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 @@ -272,6 +272,15 @@ "the tablegen option description"); } +static Optional normalizeString(OptSpecifier Opt, int TableIndex, + const ArgList &Args, + DiagnosticsEngine &Diags) { + auto *Arg = Args.getLastArg(Opt); + if (!Arg) + return None; + return std::string(Arg->getValue()); +} + static void denormalizeString(SmallVectorImpl &Args, const char *Spelling, CompilerInvocation::StringAllocator SA, @@ -498,8 +507,6 @@ .Case("false", false) .Default(false); - Opts.DumpExplodedGraphTo = - std::string(Args.getLastArgValue(OPT_analyzer_dump_egraph)); Opts.AnalyzeSpecificFunction = std::string(Args.getLastArgValue(OPT_analyze_function)); Opts.maxBlockVisitOnPath = 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 @@ -155,8 +155,11 @@ code DefaultValue = defaultvalue; } -class MarshallingInfoString - : MarshallingInfo {} +class MarshallingInfoString + : MarshallingInfo { + code Normalizer = "normalizeString"; + code Denormalizer = "denormalizeString"; +} class MarshallingInfoFlag : MarshallingInfo { @@ -189,7 +192,6 @@ class Denormalizer { code Denormalizer = denormalizer; } class NormalizedValuesScope { code NormalizedValuesScope = scope; } class NormalizedValues definitions> { list NormalizedValues = definitions; } -class DenormalizeString { code Denormalizer = "denormalizeString"; } class AutoNormalizeEnum { code Normalizer = "normalizeSimpleEnum"; code Denormalizer = "denormalizeSimpleEnum";