summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2013-07-22 16:18:13 +0000
committerHans Wennborg <hans@hanshq.net>2013-07-22 16:18:13 +0000
commit31d6fd84e671d41e4e042da5eb04886e3d801fb8 (patch)
tree6ca9cb0d3cf5ad7266a05ec9fa922192cd27e03f
parent540338259d02b24867d7a67686c7f07efd200d9e (diff)
downloadbcm5719-llvm-31d6fd84e671d41e4e042da5eb04886e3d801fb8.tar.gz
bcm5719-llvm-31d6fd84e671d41e4e042da5eb04886e3d801fb8.zip
Option parsing: allow aliases in groups
Option aliases in option groups were previously disallowed by an assert. As far as I can tell, there was no technical reason for this, and I would like to be able to put cl.exe compatible options in their own group for Clang, so let's change the assert. llvm-svn: 186838
-rw-r--r--llvm/lib/Option/Option.cpp10
-rw-r--r--llvm/unittests/Option/OptionParsingTest.cpp9
-rw-r--r--llvm/unittests/Option/Opts.td3
3 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/Option/Option.cpp b/llvm/lib/Option/Option.cpp
index f1b7941e498..bed779ad554 100644
--- a/llvm/lib/Option/Option.cpp
+++ b/llvm/lib/Option/Option.cpp
@@ -22,12 +22,10 @@ using namespace llvm::opt;
Option::Option(const OptTable::Info *info, const OptTable *owner)
: Info(info), Owner(owner) {
- // Multi-level aliases are not supported, and alias options cannot
- // have groups. This just simplifies option tracking, it is not an
- // inherent limitation.
- assert((!Info || !getAlias().isValid() || (!getAlias().getAlias().isValid() &&
- !getGroup().isValid())) &&
- "Multi-level aliases and aliases with groups are unsupported.");
+ // Multi-level aliases are not supported. This just simplifies option
+ // tracking, it is not an inherent limitation.
+ assert(!Info || !getAlias().isValid() || !getAlias().getAlias().isValid() &&
+ "Multi-level aliases are not supported.");
}
Option::~Option() {
diff --git a/llvm/unittests/Option/OptionParsingTest.cpp b/llvm/unittests/Option/OptionParsingTest.cpp
index 8bfa99b5de4..2c4fdcfa2c7 100644
--- a/llvm/unittests/Option/OptionParsingTest.cpp
+++ b/llvm/unittests/Option/OptionParsingTest.cpp
@@ -136,3 +136,12 @@ TEST(Option, ParseWithFlagExclusions) {
EXPECT_EQ(AL->getLastArgValue(OPT_SLASH_C), "foo");
EXPECT_EQ(AL->getLastArgValue(OPT_C), "bar");
}
+
+TEST(Option, ParseAliasInGroup) {
+ TestOptTable T;
+ unsigned MAI, MAC;
+
+ const char *MyArgs[] = { "-I" };
+ OwningPtr<InputArgList> AL(T.ParseArgs(MyArgs, array_endof(MyArgs), MAI, MAC));
+ EXPECT_TRUE(AL->hasArg(OPT_H));
+}
diff --git a/llvm/unittests/Option/Opts.td b/llvm/unittests/Option/Opts.td
index ccb377fc7e5..8e33ba8580b 100644
--- a/llvm/unittests/Option/Opts.td
+++ b/llvm/unittests/Option/Opts.td
@@ -16,3 +16,6 @@ def G : JoinedAndSeparate<["-"], "G">, HelpText<"The G option">, MetaVarName<"G"
def Ceq : Joined<["-", "--"], "C=">, Alias<C>, Flags<[OptFlag1]>;
def H : Flag<["-"], "H">, Flags<[HelpHidden]>;
+
+def my_group : OptionGroup<"my group">;
+def I : Flag<["-"], "I">, Alias<H>, Group<my_group>;
OpenPOWER on IntegriCloud