Skip to content

Commit d0fa7a0

Browse files
committed
Revert "[clang][cli] Allow users to specify a conditional to prevent parsing options with MarshallingInfo"
This reverts commit 77db83a
1 parent c6ea4d5 commit d0fa7a0

File tree

5 files changed

+27
-81
lines changed

5 files changed

+27
-81
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4091,9 +4091,7 @@ defm sycl : BoolOption<"sycl",
40914091
BothFlags<[CoreOption], " SYCL kernels compilation for device">, "f">,
40924092
Group<sycl_Group>;
40934093
def sycl_std_EQ : Joined<["-"], "sycl-std=">, Group<sycl_Group>, Flags<[CC1Option, NoArgumentUnused, CoreOption]>,
4094-
HelpText<"SYCL language standard to compile for.">, Values<"2017,121,1.2.1,sycl-1.2.1">,
4095-
NormalizedValues<["SYCL_2017", "SYCL_2017", "SYCL_2017", "SYCL_2017"]>, NormalizedValuesScope<"LangOptions">,
4096-
MarshallingInfoString<"LangOpts->SYCLVersion", "SYCL_None">, ShouldParseIf<fsycl.KeyPath>, AutoNormalizeEnum;
4094+
HelpText<"SYCL language standard to compile for.">, Values<"2017, 121, 1.2.1, sycl-1.2.1">;
40974095

40984096
//===----------------------------------------------------------------------===//
40994097
// FlangOption and FC1 Options

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2282,6 +2282,23 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
22822282
}
22832283

22842284
Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device);
2285+
if (Opts.SYCL) {
2286+
// -sycl-std applies to any SYCL source, not only those containing kernels,
2287+
// but also those using the SYCL API
2288+
if (const Arg *A = Args.getLastArg(OPT_sycl_std_EQ)) {
2289+
Opts.setSYCLVersion(
2290+
llvm::StringSwitch<LangOptions::SYCLMajorVersion>(A->getValue())
2291+
.Cases("2017", "1.2.1", "121", "sycl-1.2.1",
2292+
LangOptions::SYCL_2017)
2293+
.Default(LangOptions::SYCL_None));
2294+
2295+
if (Opts.getSYCLVersion() == LangOptions::SYCL_None) {
2296+
// User has passed an invalid value to the flag, this is an error
2297+
Diags.Report(diag::err_drv_invalid_value)
2298+
<< A->getAsString(Args) << A->getValue();
2299+
}
2300+
}
2301+
}
22852302

22862303
llvm::Triple T(TargetOpts.Triple);
22872304
CompilerInvocation::setLangDefaults(Opts, IK, T, PPOpts, LangStd);
@@ -2986,17 +3003,16 @@ bool CompilerInvocation::parseSimpleArgs(const ArgList &Args,
29863003
DiagnosticsEngine &Diags) {
29873004
#define OPTION_WITH_MARSHALLING( \
29883005
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
2989-
HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
2990-
DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
2991-
MERGER, EXTRACTOR, TABLE_INDEX) \
3006+
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
3007+
IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, \
3008+
TABLE_INDEX) \
29923009
if ((FLAGS)&options::CC1Option) { \
29933010
this->KEYPATH = MERGER(this->KEYPATH, DEFAULT_VALUE); \
29943011
if (IMPLIED_CHECK) \
29953012
this->KEYPATH = MERGER(this->KEYPATH, IMPLIED_VALUE); \
2996-
if (SHOULD_PARSE) \
2997-
if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, Diags)) \
2998-
this->KEYPATH = MERGER( \
2999-
this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); \
3013+
if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, Args, Diags)) \
3014+
this->KEYPATH = MERGER( \
3015+
this->KEYPATH, static_cast<decltype(this->KEYPATH)>(*MaybeValue)); \
30003016
}
30013017

30023018
#include "clang/Driver/Options.inc"
@@ -3249,9 +3265,9 @@ void CompilerInvocation::generateCC1CommandLine(
32493265
// with lifetime extension of the reference.
32503266
#define OPTION_WITH_MARSHALLING( \
32513267
PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
3252-
HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
3253-
DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
3254-
MERGER, EXTRACTOR, TABLE_INDEX) \
3268+
HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
3269+
IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, \
3270+
TABLE_INDEX) \
32553271
if ((FLAGS)&options::CC1Option) { \
32563272
[&](const auto &Extracted) { \
32573273
if (ALWAYS_EMIT || \

clang/unittests/Frontend/CompilerInvocationTest.cpp

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -508,68 +508,6 @@ TEST_F(CommandLineTest, StringVectorMultiple) {
508508
ASSERT_THAT(GeneratedArgs, ContainsN(HasSubstr("-fmodule-map-file"), 2));
509509
}
510510

511-
// A flag that should be parsed only if a condition is met.
512-
513-
TEST_F(CommandLineTest, ConditionalParsingIfFalseFlagNotPresent) {
514-
const char *Args[] = {""};
515-
516-
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
517-
518-
ASSERT_FALSE(Diags->hasErrorOccurred());
519-
ASSERT_FALSE(Invocation.getLangOpts()->SYCL);
520-
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None);
521-
522-
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
523-
524-
ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl"))));
525-
ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std="))));
526-
}
527-
528-
TEST_F(CommandLineTest, ConditionalParsingIfFalseFlagPresent) {
529-
const char *Args[] = {"-sycl-std=2017"};
530-
531-
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
532-
533-
ASSERT_FALSE(Diags->hasErrorOccurred());
534-
ASSERT_FALSE(Invocation.getLangOpts()->SYCL);
535-
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None);
536-
537-
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
538-
539-
ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl"))));
540-
ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std="))));
541-
}
542-
543-
TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagNotPresent) {
544-
const char *Args[] = {"-fsycl"};
545-
546-
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
547-
548-
ASSERT_FALSE(Diags->hasErrorOccurred());
549-
ASSERT_TRUE(Invocation.getLangOpts()->SYCL);
550-
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None);
551-
552-
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
553-
554-
ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl")));
555-
ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std="))));
556-
}
557-
558-
TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagPresent) {
559-
const char *Args[] = {"-fsycl", "-sycl-std=2017"};
560-
561-
CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags);
562-
563-
ASSERT_FALSE(Diags->hasErrorOccurred());
564-
ASSERT_TRUE(Invocation.getLangOpts()->SYCL);
565-
ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_2017);
566-
567-
Invocation.generateCC1CommandLine(GeneratedArgs, *this);
568-
569-
ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl")));
570-
ASSERT_THAT(GeneratedArgs, Contains(StrEq("-sycl-std=2017")));
571-
}
572-
573511
// Wide integer option.
574512

575513
TEST_F(CommandLineTest, WideIntegerHighValue) {

llvm/include/llvm/Option/OptParser.td

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class Option<list<string> prefixes, string name, OptionKind kind> {
101101
code DefaultValue = ?;
102102
code ImpliedValue = ?;
103103
code ImpliedCheck = "false";
104-
code ShouldParse = "true";
105104
bit ShouldAlwaysEmit = false;
106105
code NormalizerRetTy = ?;
107106
code NormalizedValuesScope = "";
@@ -203,7 +202,6 @@ class MarshallingInfoBooleanFlag<code keypath, code defaultvalue, code value, co
203202

204203
// Mixins for additional marshalling attributes.
205204

206-
class ShouldParseIf<code condition> { code ShouldParse = condition; }
207205
class AlwaysEmit { bit ShouldAlwaysEmit = true; }
208206
class Normalizer<code normalizer> { code Normalizer = normalizer; }
209207
class Denormalizer<code denormalizer> { code Denormalizer = denormalizer; }

llvm/utils/TableGen/OptParserEmitter.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ class MarshallingInfo {
7171
StringRef NormalizedValuesScope;
7272
StringRef ImpliedCheck;
7373
StringRef ImpliedValue;
74-
StringRef ShouldParse;
7574
StringRef Normalizer;
7675
StringRef Denormalizer;
7776
StringRef ValueMerger;
@@ -103,8 +102,6 @@ struct SimpleEnumValueTable {
103102
void emit(raw_ostream &OS) const {
104103
write_cstring(OS, StringRef(getOptionSpelling(R)));
105104
OS << ", ";
106-
OS << ShouldParse;
107-
OS << ", ";
108105
OS << ShouldAlwaysEmit;
109106
OS << ", ";
110107
OS << KeyPath;
@@ -170,7 +167,6 @@ static MarshallingInfo createMarshallingInfo(const Record &R) {
170167
Ret.ImpliedValue =
171168
R.getValueAsOptionalString("ImpliedValue").getValueOr(Ret.DefaultValue);
172169

173-
Ret.ShouldParse = R.getValueAsString("ShouldParse");
174170
Ret.Normalizer = R.getValueAsString("Normalizer");
175171
Ret.Denormalizer = R.getValueAsString("Denormalizer");
176172
Ret.ValueMerger = R.getValueAsString("ValueMerger");

0 commit comments

Comments
 (0)