diff options
| author | Hans Wennborg <hans@hanshq.net> | 2013-07-22 16:18:13 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2013-07-22 16:18:13 +0000 |
| commit | 31d6fd84e671d41e4e042da5eb04886e3d801fb8 (patch) | |
| tree | 6ca9cb0d3cf5ad7266a05ec9fa922192cd27e03f | |
| parent | 540338259d02b24867d7a67686c7f07efd200d9e (diff) | |
| download | bcm5719-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.cpp | 10 | ||||
| -rw-r--r-- | llvm/unittests/Option/OptionParsingTest.cpp | 9 | ||||
| -rw-r--r-- | llvm/unittests/Option/Opts.td | 3 |
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>; |

