forked from OSchip/llvm-project
Revert "[clang][cli] Allow users to specify a conditional to prevent parsing options with MarshallingInfo"
This reverts commit 77db83ae
This commit is contained in:
parent
c6ea4d5b2c
commit
d0fa7a05be
|
@ -4091,9 +4091,7 @@ defm sycl : BoolOption<"sycl",
|
||||||
BothFlags<[CoreOption], " SYCL kernels compilation for device">, "f">,
|
BothFlags<[CoreOption], " SYCL kernels compilation for device">, "f">,
|
||||||
Group<sycl_Group>;
|
Group<sycl_Group>;
|
||||||
def sycl_std_EQ : Joined<["-"], "sycl-std=">, Group<sycl_Group>, Flags<[CC1Option, NoArgumentUnused, CoreOption]>,
|
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">,
|
HelpText<"SYCL language standard to compile for.">, Values<"2017, 121, 1.2.1, sycl-1.2.1">;
|
||||||
NormalizedValues<["SYCL_2017", "SYCL_2017", "SYCL_2017", "SYCL_2017"]>, NormalizedValuesScope<"LangOptions">,
|
|
||||||
MarshallingInfoString<"LangOpts->SYCLVersion", "SYCL_None">, ShouldParseIf<fsycl.KeyPath>, AutoNormalizeEnum;
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// FlangOption and FC1 Options
|
// FlangOption and FC1 Options
|
||||||
|
|
|
@ -2282,6 +2282,23 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
}
|
}
|
||||||
|
|
||||||
Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device);
|
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.setSYCLVersion(
|
||||||
|
llvm::StringSwitch<LangOptions::SYCLMajorVersion>(A->getValue())
|
||||||
|
.Cases("2017", "1.2.1", "121", "sycl-1.2.1",
|
||||||
|
LangOptions::SYCL_2017)
|
||||||
|
.Default(LangOptions::SYCL_None));
|
||||||
|
|
||||||
|
if (Opts.getSYCLVersion() == LangOptions::SYCL_None) {
|
||||||
|
// 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);
|
llvm::Triple T(TargetOpts.Triple);
|
||||||
CompilerInvocation::setLangDefaults(Opts, IK, T, PPOpts, LangStd);
|
CompilerInvocation::setLangDefaults(Opts, IK, T, PPOpts, LangStd);
|
||||||
|
@ -2986,17 +3003,16 @@ bool CompilerInvocation::parseSimpleArgs(const ArgList &Args,
|
||||||
DiagnosticsEngine &Diags) {
|
DiagnosticsEngine &Diags) {
|
||||||
#define OPTION_WITH_MARSHALLING( \
|
#define OPTION_WITH_MARSHALLING( \
|
||||||
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
|
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
|
||||||
HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
|
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
|
||||||
DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
|
IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, \
|
||||||
MERGER, EXTRACTOR, TABLE_INDEX) \
|
TABLE_INDEX) \
|
||||||
if ((FLAGS)&options::CC1Option) { \
|
if ((FLAGS)&options::CC1Option) { \
|
||||||
this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \
|
this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \
|
||||||
if (IMPLIED_CHECK) \
|
if (IMPLIED_CHECK) \
|
||||||
this->KEYPATH = MERGER(this->KEYPATH, IMPLIED_VALUE); \
|
this->KEYPATH = MERGER(this->KEYPATH, IMPLIED_VALUE); \
|
||||||
if (SHOULD_PARSE) \
|
if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, Diags)) \
|
||||||
if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, Diags)) \
|
this->KEYPATH = MERGER( \
|
||||||
this->KEYPATH = MERGER( \
|
this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); \
|
||||||
this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "clang/Driver/Options.inc"
|
#include "clang/Driver/Options.inc"
|
||||||
|
@ -3249,9 +3265,9 @@ void CompilerInvocation::generateCC1CommandLine(
|
||||||
// with lifetime extension of the reference.
|
// with lifetime extension of the reference.
|
||||||
#define OPTION_WITH_MARSHALLING( \
|
#define OPTION_WITH_MARSHALLING( \
|
||||||
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
|
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
|
||||||
HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
|
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
|
||||||
DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
|
IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, \
|
||||||
MERGER, EXTRACTOR, TABLE_INDEX) \
|
TABLE_INDEX) \
|
||||||
if ((FLAGS)&options::CC1Option) { \
|
if ((FLAGS)&options::CC1Option) { \
|
||||||
[&](const auto &Extracted) { \
|
[&](const auto &Extracted) { \
|
||||||
if (ALWAYS_EMIT || \
|
if (ALWAYS_EMIT || \
|
||||||
|
|
|
@ -508,68 +508,6 @@ TEST_F(CommandLineTest, StringVectorMultiple) {
|
||||||
ASSERT_THAT(GeneratedArgs, ContainsN(HasSubstr("-fmodule-map-file"), 2));
|
ASSERT_THAT(GeneratedArgs, ContainsN(HasSubstr("-fmodule-map-file"), 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
// A flag that should be parsed only if a condition is met.
|
|
||||||
|
|
||||||
TEST_F(CommandLineTest, ConditionalParsingIfFalseFlagNotPresent) {
|
|
||||||
const char *Args[] = {""};
|
|
||||||
|
|
||||||
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
|
|
||||||
|
|
||||||
ASSERT_FALSE(Diags->hasErrorOccurred());
|
|
||||||
ASSERT_FALSE(Invocation.getLangOpts()->SYCL);
|
|
||||||
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None);
|
|
||||||
|
|
||||||
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
|
|
||||||
|
|
||||||
ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl"))));
|
|
||||||
ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std="))));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(CommandLineTest, ConditionalParsingIfFalseFlagPresent) {
|
|
||||||
const char *Args[] = {"-sycl-std=2017"};
|
|
||||||
|
|
||||||
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
|
|
||||||
|
|
||||||
ASSERT_FALSE(Diags->hasErrorOccurred());
|
|
||||||
ASSERT_FALSE(Invocation.getLangOpts()->SYCL);
|
|
||||||
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None);
|
|
||||||
|
|
||||||
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
|
|
||||||
|
|
||||||
ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl"))));
|
|
||||||
ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std="))));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagNotPresent) {
|
|
||||||
const char *Args[] = {"-fsycl"};
|
|
||||||
|
|
||||||
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
|
|
||||||
|
|
||||||
ASSERT_FALSE(Diags->hasErrorOccurred());
|
|
||||||
ASSERT_TRUE(Invocation.getLangOpts()->SYCL);
|
|
||||||
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None);
|
|
||||||
|
|
||||||
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
|
|
||||||
|
|
||||||
ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl")));
|
|
||||||
ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std="))));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagPresent) {
|
|
||||||
const char *Args[] = {"-fsycl", "-sycl-std=2017"};
|
|
||||||
|
|
||||||
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
|
|
||||||
|
|
||||||
ASSERT_FALSE(Diags->hasErrorOccurred());
|
|
||||||
ASSERT_TRUE(Invocation.getLangOpts()->SYCL);
|
|
||||||
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_2017);
|
|
||||||
|
|
||||||
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
|
|
||||||
|
|
||||||
ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl")));
|
|
||||||
ASSERT_THAT(GeneratedArgs, Contains(StrEq("-sycl-std=2017")));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wide integer option.
|
// Wide integer option.
|
||||||
|
|
||||||
TEST_F(CommandLineTest, WideIntegerHighValue) {
|
TEST_F(CommandLineTest, WideIntegerHighValue) {
|
||||||
|
|
|
@ -101,7 +101,6 @@ class Option<list<string> prefixes, string name, OptionKind kind> {
|
||||||
code DefaultValue = ?;
|
code DefaultValue = ?;
|
||||||
code ImpliedValue = ?;
|
code ImpliedValue = ?;
|
||||||
code ImpliedCheck = "false";
|
code ImpliedCheck = "false";
|
||||||
code ShouldParse = "true";
|
|
||||||
bit ShouldAlwaysEmit = false;
|
bit ShouldAlwaysEmit = false;
|
||||||
code NormalizerRetTy = ?;
|
code NormalizerRetTy = ?;
|
||||||
code NormalizedValuesScope = "";
|
code NormalizedValuesScope = "";
|
||||||
|
@ -203,7 +202,6 @@ class MarshallingInfoBooleanFlag<code keypath, code defaultvalue, code value, co
|
||||||
|
|
||||||
// Mixins for additional marshalling attributes.
|
// Mixins for additional marshalling attributes.
|
||||||
|
|
||||||
class ShouldParseIf<code condition> { code ShouldParse = condition; }
|
|
||||||
class AlwaysEmit { bit ShouldAlwaysEmit = true; }
|
class AlwaysEmit { bit ShouldAlwaysEmit = true; }
|
||||||
class Normalizer<code normalizer> { code Normalizer = normalizer; }
|
class Normalizer<code normalizer> { code Normalizer = normalizer; }
|
||||||
class Denormalizer<code denormalizer> { code Denormalizer = denormalizer; }
|
class Denormalizer<code denormalizer> { code Denormalizer = denormalizer; }
|
||||||
|
|
|
@ -71,7 +71,6 @@ public:
|
||||||
StringRef NormalizedValuesScope;
|
StringRef NormalizedValuesScope;
|
||||||
StringRef ImpliedCheck;
|
StringRef ImpliedCheck;
|
||||||
StringRef ImpliedValue;
|
StringRef ImpliedValue;
|
||||||
StringRef ShouldParse;
|
|
||||||
StringRef Normalizer;
|
StringRef Normalizer;
|
||||||
StringRef Denormalizer;
|
StringRef Denormalizer;
|
||||||
StringRef ValueMerger;
|
StringRef ValueMerger;
|
||||||
|
@ -103,8 +102,6 @@ struct SimpleEnumValueTable {
|
||||||
void emit(raw_ostream &OS) const {
|
void emit(raw_ostream &OS) const {
|
||||||
write_cstring(OS, StringRef(getOptionSpelling(R)));
|
write_cstring(OS, StringRef(getOptionSpelling(R)));
|
||||||
OS << ", ";
|
OS << ", ";
|
||||||
OS << ShouldParse;
|
|
||||||
OS << ", ";
|
|
||||||
OS << ShouldAlwaysEmit;
|
OS << ShouldAlwaysEmit;
|
||||||
OS << ", ";
|
OS << ", ";
|
||||||
OS << KeyPath;
|
OS << KeyPath;
|
||||||
|
@ -170,7 +167,6 @@ static MarshallingInfo createMarshallingInfo(const Record &R) {
|
||||||
Ret.ImpliedValue =
|
Ret.ImpliedValue =
|
||||||
R.getValueAsOptionalString("ImpliedValue").getValueOr(Ret.DefaultValue);
|
R.getValueAsOptionalString("ImpliedValue").getValueOr(Ret.DefaultValue);
|
||||||
|
|
||||||
Ret.ShouldParse = R.getValueAsString("ShouldParse");
|
|
||||||
Ret.Normalizer = R.getValueAsString("Normalizer");
|
Ret.Normalizer = R.getValueAsString("Normalizer");
|
||||||
Ret.Denormalizer = R.getValueAsString("Denormalizer");
|
Ret.Denormalizer = R.getValueAsString("Denormalizer");
|
||||||
Ret.ValueMerger = R.getValueAsString("ValueMerger");
|
Ret.ValueMerger = R.getValueAsString("ValueMerger");
|
||||||
|
|
Loading…
Reference in New Issue