aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2020-12-21 14:28:09 +0100
committerJan Svoboda <jan_svoboda@apple.com>2020-12-22 14:11:16 +0100
commit63a24816f561a5d8e28ca7054892bd8602618be4 (patch)
treed27c478f31eb58eb164ddf92048bf1a9727c6ebe /clang/lib/Frontend/CompilerInvocation.cpp
parent44e74c75e614af453f4824cb9bf1f0056d7cf426 (diff)
downloadllvm-63a24816f561a5d8e28ca7054892bd8602618be4.zip
llvm-63a24816f561a5d8e28ca7054892bd8602618be4.tar.gz
llvm-63a24816f561a5d8e28ca7054892bd8602618be4.tar.bz2
[clang][cli] Implement `getAllArgValues` marshalling
This infrastructure can be used ~30 more command line options. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D93631
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index fc5fd15..d7c1a6f 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -323,6 +323,23 @@ static Optional<IntTy> normalizeStringIntegral(OptSpecifier Opt, int,
return Res;
}
+static Optional<std::vector<std::string>>
+normalizeStringVector(OptSpecifier Opt, int, const ArgList &Args,
+ DiagnosticsEngine &) {
+ return Args.getAllArgValues(Opt);
+}
+
+static void denormalizeStringVector(SmallVectorImpl<const char *> &Args,
+ const char *Spelling,
+ CompilerInvocation::StringAllocator SA,
+ Option::OptionClass OptClass,
+ unsigned TableIndex,
+ const std::vector<std::string> &Values) {
+ for (const std::string &Value : Values) {
+ denormalizeString(Args, Spelling, SA, OptClass, TableIndex, Value);
+ }
+}
+
static Optional<std::string> normalizeTriple(OptSpecifier Opt, int TableIndex,
const ArgList &Args,
DiagnosticsEngine &Diags) {
@@ -1715,7 +1732,6 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
Opts.ASTDumpDecls = Args.hasArg(OPT_ast_dump, OPT_ast_dump_EQ);
Opts.ASTDumpAll = Args.hasArg(OPT_ast_dump_all, OPT_ast_dump_all_EQ);
- Opts.ModuleMapFiles = Args.getAllArgValues(OPT_fmodule_map_file);
// Only the -fmodule-file=<file> form.
for (const auto *A : Args.filtered(OPT_fmodule_file)) {
StringRef Val = A->getValue();