[PATCH] D94678: [clang][cli] Parse & generate options necessary for LangOptions defaults manually
Jan Svoboda via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 14 04:52:28 PST 2021
jansvoboda11 created this revision.
jansvoboda11 added reviewers: dexonsmith, Bigcheese.
Herald added a subscriber: dang.
jansvoboda11 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D94678
Files:
clang/include/clang/Driver/Options.td
clang/lib/Frontend/CompilerInvocation.cpp
Index: clang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -2137,6 +2137,20 @@
llvm_unreachable("unknown input language");
}
+static std::string GetOptName(llvm::opt::OptSpecifier OptSpecifier) {
+ static const OptTable &OptTable = getDriverOptTable();
+ return OptTable.getOption(OptSpecifier).getPrefixedName();
+}
+
+static void GenerateLangArgs(const LangOptions &Opts,
+ SmallVectorImpl<const char *> &Args,
+ CompilerInvocation::StringAllocator SA) {
+ if (Opts.IncludeDefaultHeader)
+ Args.push_back(SA(GetOptName(OPT_finclude_default_header)));
+ if (Opts.DeclareOpenCLBuiltins)
+ Args.push_back(SA(GetOptName(OPT_fdeclare_opencl_builtins)));
+}
+
static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
const llvm::Triple &T,
std::vector<std::string> &Includes,
@@ -2212,6 +2226,10 @@
Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device);
+ // These need to be parsed now. They are used to set OpenCL defaults.
+ Opts.IncludeDefaultHeader = Args.hasArg(OPT_finclude_default_header);
+ Opts.DeclareOpenCLBuiltins = Args.hasArg(OPT_fdeclare_opencl_builtins);
+
CompilerInvocation::setLangDefaults(Opts, IK, T, Includes, LangStd);
// -cl-strict-aliasing needs to emit diagnostic in the case where CL > 1.0.
@@ -3163,6 +3181,8 @@
#undef DIAG_OPTION_WITH_MARSHALLING
#undef OPTION_WITH_MARSHALLING
#undef GENERATE_OPTION_WITH_MARSHALLING
+
+ GenerateLangArgs(*LangOpts, Args, SA);
}
IntrusiveRefCntPtr<llvm::vfs::FileSystem>
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -5208,11 +5208,9 @@
NormalizedValues<["DCC_CDecl", "DCC_FastCall", "DCC_StdCall", "DCC_VectorCall", "DCC_RegCall"]>,
MarshallingInfoString<LangOpts<"DefaultCallingConv">, "DCC_None">, AutoNormalizeEnum;
def finclude_default_header : Flag<["-"], "finclude-default-header">,
- HelpText<"Include default header file for OpenCL">,
- MarshallingInfoFlag<LangOpts<"IncludeDefaultHeader">>;
+ HelpText<"Include default header file for OpenCL">;
def fdeclare_opencl_builtins : Flag<["-"], "fdeclare-opencl-builtins">,
- HelpText<"Add OpenCL builtin function declarations (experimental)">,
- MarshallingInfoFlag<LangOpts<"DeclareOpenCLBuiltins">>;
+ HelpText<"Add OpenCL builtin function declarations (experimental)">;
def fpreserve_vec3_type : Flag<["-"], "fpreserve-vec3-type">,
HelpText<"Preserve 3-component vector type">,
MarshallingInfoFlag<CodeGenOpts<"PreserveVec3Type">>;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94678.316628.patch
Type: text/x-patch
Size: 2868 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210114/9a9c7d1f/attachment.bin>
More information about the cfe-commits
mailing list