Option parsing: allow aliases in groups
authorHans Wennborg <hans@hanshq.net>
Mon, 22 Jul 2013 16:18:13 +0000 (16:18 +0000)
committerHans Wennborg <hans@hanshq.net>
Mon, 22 Jul 2013 16:18:13 +0000 (16:18 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186838 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Option/Option.cpp
unittests/Option/OptionParsingTest.cpp
unittests/Option/Opts.td

index f1b7941e498293b6b30e679839f5f3b5a17359cd..bed779ad5543403d4cb9817a708d812ac58fde1c 100644 (file)
@@ -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() {
index 8bfa99b5de4abf3cba2672ca03d701883f57cb20..2c4fdcfa2c7441ee159ce4419e96554fd6a63a81 100644 (file)
@@ -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));
+}
index ccb377fc7e5409fa84871b9b2a8cdf97cce21032..8e33ba8580b6edd682e19ac569a709471d4513c7 100644 (file)
@@ -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>;