[Option] Support MultiArg in --help
authorNick Kledzik <kledzik@apple.com>
Fri, 15 Aug 2014 21:35:07 +0000 (21:35 +0000)
committerNick Kledzik <kledzik@apple.com>
Fri, 15 Aug 2014 21:35:07 +0000 (21:35 +0000)
Currently, if you use a MultiArg<> option, then printing out the help/usage
message will cause an assert.  This fixes getOptionHelpName() to work with
MultiArg Options.

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

lib/Option/OptTable.cpp

index 6842f4d57919ceb6c5230ba9fd6668b941e57312..ef9a3e75a155d4f8b60dc1d06be843c9cdaf1c44 100644 (file)
@@ -300,7 +300,18 @@ static std::string getOptionHelpName(const OptTable &Opts, OptSpecifier Id) {
     llvm_unreachable("Invalid option with help text.");
 
   case Option::MultiArgClass:
-    llvm_unreachable("Cannot print metavar for this kind of option.");
+    if (const char *MetaVarName = Opts.getOptionMetaVar(Id)) {
+      // For MultiArgs, metavar is full list of all argument names.
+      Name += ' ';
+      Name += MetaVarName;
+    }
+    else {
+      // For MultiArgs<N>, if metavar not supplied, print <value> N times.
+      for (unsigned i=0, e=O.getNumArgs(); i< e; ++i) {
+        Name += " <value>";
+      }
+    }
+    break;
 
   case Option::FlagClass:
     break;