[pkg-d-commits] [ldc] 42/74: Allow multiple occurrences for almost all command-line flags

Matthias Klumpp mak at moszumanska.debian.org
Thu Jul 13 20:54:17 UTC 2017


This is an automated email from the git hooks/post-receive script.

mak pushed a commit to annotated tag v1.3.0-beta2
in repository ldc.

commit d01a91f7551c752ad3ae446c60109501c1f226ee
Author: Martin <noone at nowhere.com>
Date:   Sun May 14 02:43:09 2017 +0200

    Allow multiple occurrences for almost all command-line flags
    
    Except for `-sanitize` and `-cache-prune*`.
---
 driver/cache.cpp                    |   5 +-
 driver/cl_options.cpp               | 192 +++++++++++++++++-------------------
 driver/configfile.cpp               |   4 +-
 driver/linker.cpp                   |  18 ++--
 driver/main.cpp                     |  22 ++---
 driver/toobj.cpp                    |   3 +-
 gen/llvmhelpers.cpp                 |   2 +-
 gen/modules.cpp                     |   7 +-
 gen/optimizer.cpp                   |  62 +++++-------
 gen/passes/GarbageCollect2Stack.cpp |   3 +-
 gen/pgo.cpp                         |   4 +-
 gen/runtime.cpp                     |   5 +-
 gen/toir.cpp                        |   5 +-
 13 files changed, 149 insertions(+), 183 deletions(-)

diff --git a/driver/cache.cpp b/driver/cache.cpp
index 110f99b..a06939e 100644
--- a/driver/cache.cpp
+++ b/driver/cache.cpp
@@ -114,8 +114,7 @@ namespace {
 
 // Options for the cache pruning algorithm
 llvm::cl::opt<bool> pruneEnabled("cache-prune",
-                                 llvm::cl::desc("Enable cache pruning."),
-                                 llvm::cl::ZeroOrMore);
+                                 llvm::cl::desc("Enable cache pruning."));
 llvm::cl::opt<unsigned long long> pruneSizeLimitInBytes(
     "cache-prune-maxbytes",
     llvm::cl::desc("Sets the maximum cache size to <size> bytes. Implies "
@@ -142,7 +141,7 @@ llvm::cl::opt<unsigned> pruneSizeLimitPercentage(
 
 enum class RetrievalMode { Copy, HardLink, AnyLink, SymLink };
 llvm::cl::opt<RetrievalMode> cacheRecoveryMode(
-    "cache-retrieval",
+    "cache-retrieval", llvm::cl::ZeroOrMore,
     llvm::cl::desc("Set the cache retrieval mechanism (default: copy)."),
     llvm::cl::init(RetrievalMode::Copy),
     clEnumValues(
diff --git a/driver/cl_options.cpp b/driver/cl_options.cpp
index aa537ab..eef3fbf 100644
--- a/driver/cl_options.cpp
+++ b/driver/cl_options.cpp
@@ -77,9 +77,8 @@ cl::opt<bool, true>
 
 cl::opt<bool> compileOnly("c", cl::desc("Do not link"), cl::ZeroOrMore);
 
-static cl::opt<bool, true> createStaticLib("lib",
+static cl::opt<bool, true> createStaticLib("lib", cl::ZeroOrMore,
                                            cl::desc("Create static library"),
-                                           cl::ZeroOrMore,
                                            cl::location(global.params.lib));
 
 static cl::opt<bool, true>
@@ -103,9 +102,8 @@ static cl::opt<bool, true> verbose_cg("v-cg", cl::desc("Verbose codegen"),
                                       cl::location(global.params.verbose_cg));
 
 static cl::opt<unsigned, true> errorLimit(
-    "verrors", cl::ZeroOrMore,
-    cl::desc("Limit the number of error messages (0 means unlimited)"),
-    cl::location(global.errorLimit));
+    "verrors", cl::ZeroOrMore, cl::location(global.errorLimit),
+    cl::desc("Limit the number of error messages (0 means unlimited)"));
 
 static cl::opt<bool, true>
     showGaggedErrors("verrors-spec", cl::ZeroOrMore,
@@ -114,12 +112,12 @@ static cl::opt<bool, true>
                               "__traits(compiles,...)"));
 
 static cl::opt<ubyte, true> warnings(
-    cl::desc("Warnings:"), cl::ZeroOrMore,
+    cl::desc("Warnings:"), cl::ZeroOrMore, cl::location(global.params.warnings),
     clEnumValues(
         clEnumValN(1, "w", "Enable warnings as errors (compilation will halt)"),
         clEnumValN(2, "wi",
                    "Enable warnings as messages (compilation will continue)")),
-    cl::location(global.params.warnings), cl::init(0));
+    cl::init(0));
 
 static cl::opt<bool, true> ignoreUnsupportedPragmas(
     "ignore", cl::desc("Ignore unsupported pragmas"), cl::ZeroOrMore,
@@ -135,11 +133,11 @@ static cl::opt<ubyte, true> debugInfo(
     cl::location(global.params.symdebug), cl::init(0));
 
 static cl::opt<unsigned, true>
-    dwarfVersion("dwarf-version", cl::desc("Dwarf version"),
-                 cl::location(global.params.dwarfVersion), cl::init(0),
-                 cl::Hidden);
+    dwarfVersion("dwarf-version", cl::desc("Dwarf version"), cl::ZeroOrMore,
+                 cl::location(global.params.dwarfVersion), cl::Hidden);
 
-cl::opt<bool> noAsm("noasm", cl::desc("Disallow use of inline assembler"));
+cl::opt<bool> noAsm("noasm", cl::desc("Disallow use of inline assembler"),
+                    cl::ZeroOrMore);
 
 // Output file options
 cl::opt<bool> dontWriteObj("o-", cl::desc("Do not write object file"),
@@ -150,12 +148,13 @@ cl::opt<std::string> objectFile("of", cl::value_desc("filename"), cl::Prefix,
                                 cl::ZeroOrMore);
 
 cl::opt<std::string> objectDir("od", cl::value_desc("directory"), cl::Prefix,
-                               cl::ZeroOrMore,
-                               cl::desc("Write object files to <directory>"));
+                               cl::desc("Write object files to <directory>"),
+                               cl::ZeroOrMore);
 
 cl::opt<std::string>
     soname("soname", cl::value_desc("soname"), cl::Hidden, cl::Prefix,
-           cl::desc("Use <soname> as output shared library soname"));
+           cl::desc("Use <soname> as output shared library soname"),
+           cl::ZeroOrMore);
 
 // Output format options
 cl::opt<bool> output_bc("output-bc", cl::desc("Write LLVM bitcode"),
@@ -170,16 +169,15 @@ cl::opt<cl::boolOrDefault> output_o("output-o", cl::ZeroOrMore,
                                     cl::desc("Write native object"));
 
 static cl::opt<bool, true>
-    cleanupObjectFiles("cleanup-obj",
+    cleanupObjectFiles("cleanup-obj", cl::ZeroOrMore, cl::ReallyHidden,
                        cl::desc("Remove generated object files on success"),
-                       cl::ZeroOrMore, cl::ReallyHidden,
                        cl::location(global.params.cleanupObjectFiles));
 
 // Disabling Red Zone
 cl::opt<bool, true>
-    disableRedZone("disable-red-zone",
+    disableRedZone("disable-red-zone", cl::ZeroOrMore,
                    cl::desc("Do not emit code that uses the red zone."),
-                   cl::location(global.params.disableRedZone), cl::init(false));
+                   cl::location(global.params.disableRedZone));
 
 // DDoc options
 static cl::opt<bool, true> doDdoc("D", cl::desc("Generate documentation"),
@@ -208,19 +206,17 @@ static cl::opt<bool, true>
     doHdrGen("H", cl::desc("Generate 'header' file"), cl::ZeroOrMore,
              cl::location(global.params.doHdrGeneration));
 
-cl::opt<std::string> hdrDir("Hd",
+cl::opt<std::string> hdrDir("Hd", cl::ZeroOrMore, cl::Prefix,
                             cl::desc("Write 'header' file to <directory>"),
-                            cl::value_desc("directory"), cl::Prefix,
-                            cl::ZeroOrMore);
+                            cl::value_desc("directory"));
 
-cl::opt<std::string> hdrFile("Hf", cl::ZeroOrMore,
+cl::opt<std::string> hdrFile("Hf", cl::ZeroOrMore, cl::Prefix,
                              cl::desc("Write 'header' file to <filename>"),
-                             cl::value_desc("filename"), cl::Prefix);
+                             cl::value_desc("filename"));
 
 cl::opt<bool>
-    hdrKeepAllBodies("Hkeep-all-bodies",
-                     cl::desc("Keep all function bodies in .di files"),
-                     cl::ZeroOrMore);
+    hdrKeepAllBodies("Hkeep-all-bodies", cl::ZeroOrMore,
+                     cl::desc("Keep all function bodies in .di files"));
 
 static cl::opt<bool, true> unittest("unittest", cl::ZeroOrMore,
                                     cl::desc("Compile in unit tests"),
@@ -229,7 +225,7 @@ static cl::opt<bool, true> unittest("unittest", cl::ZeroOrMore,
 cl::opt<std::string>
     cacheDir("cache", cl::desc("Enable compilation cache, using <cache dir> to "
                                "store cache files (experimental)"),
-             cl::value_desc("cache dir"));
+             cl::value_desc("cache dir"), cl::ZeroOrMore);
 
 static StringsAdapter strImpPathStore("J", global.params.fileImppath);
 static cl::list<std::string, StringsAdapter> stringImportPaths(
@@ -267,22 +263,19 @@ static D_DebugStorage dds;
 // -debug is already declared in LLVM (at least, in debug builds),
 // so we need to be a bit more verbose.
 static cl::list<std::string, D_DebugStorage> debugVersionsOption(
-    "d-debug",
+    "d-debug", cl::location(dds), cl::CommaSeparated, cl::ValueOptional,
     cl::desc("Compile in debug code >= <level> or identified by <idents>"),
-    cl::value_desc("level/idents"), cl::location(dds), cl::CommaSeparated,
-    cl::ValueOptional);
+    cl::value_desc("level/idents"));
 
 // -version is also declared in LLVM, so again we need to be a bit more verbose.
 cl::list<std::string> versions(
-    "d-version",
-    cl::desc("Compile in version code >= <level> or identified by <idents>"),
-    cl::value_desc("level/idents"), cl::CommaSeparated);
+    "d-version", cl::CommaSeparated, cl::value_desc("level/idents"),
+    cl::desc("Compile in version code >= <level> or identified by <idents>"));
 
 cl::list<std::string> transitions(
-    "transition",
+    "transition", cl::CommaSeparated, cl::value_desc("idents"),
     cl::desc(
-        "Help with language change identified by <idents>, use ? for list"),
-    cl::value_desc("idents"), cl::CommaSeparated);
+        "Help with language change identified by <idents>, use ? for list"));
 
 cl::list<std::string> linkerSwitches("L",
     cl::desc("Pass <linkerflag> to the linker"),
@@ -293,13 +286,13 @@ cl::list<std::string> ccSwitches("Xcc", cl::CommaSeparated,
     cl::value_desc("ccflag"));
 
 cl::opt<std::string>
-    moduleDeps("deps",
+    moduleDeps("deps", cl::ValueOptional, cl::ZeroOrMore,
+               cl::value_desc("filename"),
                cl::desc("Write module dependencies to filename (only imports). "
                         "'-deps' alone prints module dependencies "
-                        "(imports/file/version/debug/lib)"),
-               cl::value_desc("filename"), cl::ValueOptional);
+                        "(imports/file/version/debug/lib)"));
 
-cl::opt<std::string> mArch("march",
+cl::opt<std::string> mArch("march", cl::ZeroOrMore,
                            cl::desc("Architecture to generate code for:"));
 
 cl::opt<bool> m32bits("m32", cl::desc("32 bit target"), cl::ZeroOrMore);
@@ -307,23 +300,21 @@ cl::opt<bool> m32bits("m32", cl::desc("32 bit target"), cl::ZeroOrMore);
 cl::opt<bool> m64bits("m64", cl::desc("64 bit target"), cl::ZeroOrMore);
 
 cl::opt<std::string>
-    mCPU("mcpu",
-         cl::desc("Target a specific cpu type (-mcpu=help for details)"),
-         cl::value_desc("cpu-name"), cl::init(""));
+    mCPU("mcpu", cl::ZeroOrMore, cl::value_desc("cpu-name"), cl::init(""),
+         cl::desc("Target a specific cpu type (-mcpu=help for details)"));
 
 cl::list<std::string>
     mAttrs("mattr", cl::CommaSeparated,
-           cl::desc("Target specific attributes (-mattr=help for details)"),
-           cl::value_desc("a1,+a2,-a3,..."));
+           cl::value_desc("a1,+a2,-a3,..."),
+           cl::desc("Target specific attributes (-mattr=help for details)"));
 
-cl::opt<std::string> mTargetTriple("mtriple",
+cl::opt<std::string> mTargetTriple("mtriple", cl::ZeroOrMore,
                                    cl::desc("Override target triple"));
 
 #if LDC_LLVM_VER >= 307
 cl::opt<std::string>
-    mABI("mabi",
-         cl::desc("The name of the ABI to be targeted from the backend"),
-         cl::Hidden, cl::init(""));
+    mABI("mabi", cl::ZeroOrMore, cl::Hidden, cl::init(""),
+         cl::desc("The name of the ABI to be targeted from the backend"));
 #endif
 
 static StringsAdapter
@@ -350,7 +341,8 @@ cl::opt<llvm::Reloc::Model> mRelocModel(
                    "Relocatable external references, non-relocatable code")));
 
 cl::opt<llvm::CodeModel::Model> mCodeModel(
-    "code-model", cl::desc("Code model"), cl::init(llvm::CodeModel::Default),
+    "code-model", cl::desc("Code model"), cl::ZeroOrMore,
+    cl::init(llvm::CodeModel::Default),
     clEnumValues(
         clEnumValN(llvm::CodeModel::Default, "default",
                    "Target default code model"),
@@ -361,7 +353,7 @@ cl::opt<llvm::CodeModel::Model> mCodeModel(
 
 cl::opt<FloatABI::Type> mFloatABI(
     "float-abi", cl::desc("ABI/operations to use for floating-point types:"),
-    cl::init(FloatABI::Default),
+    cl::ZeroOrMore, cl::init(FloatABI::Default),
     clEnumValues(
         clEnumValN(FloatABI::Default, "default",
                    "Target default floating-point ABI"),
@@ -374,73 +366,67 @@ cl::opt<FloatABI::Type> mFloatABI(
 
 cl::opt<bool>
     disableFpElim("disable-fp-elim", cl::ZeroOrMore,
-                  cl::desc("Disable frame pointer elimination optimization"),
-                  cl::init(false));
+                  cl::desc("Disable frame pointer elimination optimization"));
 
 static cl::opt<bool, true, FlagParser<bool>>
-    asserts("asserts", cl::desc("(*) Enable assertions"),
+    asserts("asserts", cl::ZeroOrMore, cl::desc("(*) Enable assertions"),
             cl::value_desc("bool"), cl::location(global.params.useAssert),
             cl::init(true));
 
 cl::opt<BOUNDSCHECK> boundsCheck(
-    "boundscheck", cl::desc("Array bounds check"),
+    "boundscheck", cl::ZeroOrMore, cl::desc("Array bounds check"),
+    cl::init(BOUNDSCHECKdefault),
     clEnumValues(clEnumValN(BOUNDSCHECKoff, "off", "Disabled"),
                  clEnumValN(BOUNDSCHECKsafeonly, "safeonly",
                             "Enabled for @safe functions only"),
-                 clEnumValN(BOUNDSCHECKon, "on", "Enabled for all functions")),
-    cl::init(BOUNDSCHECKdefault));
+                 clEnumValN(BOUNDSCHECKon, "on", "Enabled for all functions")));
 
 static cl::opt<bool, true, FlagParser<bool>>
-    invariants("invariants", cl::desc("(*) Enable invariants"),
+    invariants("invariants", cl::ZeroOrMore, cl::desc("(*) Enable invariants"),
                cl::location(global.params.useInvariants), cl::init(true));
 
-static cl::opt<bool, true, FlagParser<bool>>
-    preconditions("preconditions",
-                  cl::desc("(*) Enable function preconditions"),
-                  cl::location(global.params.useIn), cl::init(true));
+static cl::opt<bool, true, FlagParser<bool>> preconditions(
+    "preconditions", cl::ZeroOrMore, cl::location(global.params.useIn),
+    cl::desc("(*) Enable function preconditions"), cl::init(true));
 
 static cl::opt<bool, true, FlagParser<bool>>
-    postconditions("postconditions",
-                   cl::desc("(*) Enable function postconditions"),
-                   cl::location(global.params.useOut), cl::init(true));
+    postconditions("postconditions", cl::ZeroOrMore,
+                   cl::location(global.params.useOut), cl::init(true),
+                   cl::desc("(*) Enable function postconditions"));
 
 static MultiSetter ContractsSetter(false, &global.params.useIn,
-                                   &global.params.useOut, NULL);
+                                   &global.params.useOut, nullptr);
 static cl::opt<MultiSetter, true, FlagParser<bool>>
-    contracts("contracts",
-              cl::desc("(*) Enable function pre- and post-conditions"),
-              cl::location(ContractsSetter));
+    contracts("contracts", cl::ZeroOrMore, cl::location(ContractsSetter),
+              cl::desc("(*) Enable function pre- and post-conditions"));
 
 bool nonSafeBoundsChecks = true;
 static MultiSetter ReleaseSetter(true, &global.params.useAssert,
                                  &nonSafeBoundsChecks,
                                  &global.params.useInvariants,
                                  &global.params.useOut, &global.params.useIn,
-                                 NULL);
+                                 nullptr);
 static cl::opt<MultiSetter, true, cl::parser<bool>>
-    release("release",
+    release("release", cl::ZeroOrMore, cl::location(ReleaseSetter),
             cl::desc("Disables asserts, invariants, contracts and boundscheck"),
-            cl::location(ReleaseSetter), cl::ValueDisallowed);
+            cl::ValueDisallowed);
 
 cl::opt<bool, true>
     singleObj("singleobj", cl::desc("Create only a single output object file"),
-              cl::location(global.params.oneobj));
+              cl::ZeroOrMore, cl::location(global.params.oneobj));
 
 cl::opt<uint32_t, true> hashThreshold(
-    "hash-threshold",
-    cl::desc("Hash symbol names longer than this threshold (experimental)"),
-    cl::location(global.params.hashThreshold), cl::init(0));
+    "hash-threshold", cl::ZeroOrMore, cl::location(global.params.hashThreshold),
+    cl::desc("Hash symbol names longer than this threshold (experimental)"));
 
 cl::opt<bool> linkonceTemplates(
-    "linkonce-templates",
+    "linkonce-templates", cl::ZeroOrMore,
     cl::desc(
-        "Use linkonce_odr linkage for template symbols instead of weak_odr"),
-    cl::ZeroOrMore);
+        "Use linkonce_odr linkage for template symbols instead of weak_odr"));
 
 cl::opt<bool> disableLinkerStripDead(
-    "disable-linker-strip-dead",
-    cl::desc("Do not try to remove unused symbols during linking"),
-    cl::init(false));
+    "disable-linker-strip-dead", cl::ZeroOrMore,
+    cl::desc("Do not try to remove unused symbols during linking"));
 
 // Math options
 bool fFastMath; // Storage for the dynamically created ffast-math option.
@@ -455,33 +441,32 @@ void setDefaultMathOptions(llvm::TargetMachine &target) {
 }
 
 cl::opt<bool, true>
-    allinst("allinst", cl::ZeroOrMore,
-            cl::desc("Generate code for all template instantiations"),
-            cl::location(global.params.allInst));
+    allinst("allinst", cl::ZeroOrMore, cl::location(global.params.allInst),
+            cl::desc("Generate code for all template instantiations"));
 
 cl::opt<unsigned, true> nestedTemplateDepth(
-    "template-depth", cl::location(global.params.nestedTmpl), cl::init(500),
+    "template-depth", cl::ZeroOrMore, cl::location(global.params.nestedTmpl),
+    cl::init(500),
     cl::desc(
         "Set maximum number of nested template instantiations (experimental)"));
 
 cl::opt<bool, true>
-    useDIP25("dip25", cl::ZeroOrMore,
-             cl::desc("Implement http://wiki.dlang.org/DIP25 (experimental)"),
-             cl::location(global.params.useDIP25));
+    useDIP25("dip25", cl::ZeroOrMore, cl::location(global.params.useDIP25),
+             cl::desc("Implement http://wiki.dlang.org/DIP25 (experimental)"));
 
 cl::opt<bool> useDIP1000(
     "dip1000", cl::ZeroOrMore,
     cl::desc("Implement http://wiki.dlang.org/DIP1000 (experimental)"));
 
 cl::opt<bool, true> betterC(
-    "betterC", cl::ZeroOrMore,
-    cl::desc("Omit generating some runtime information and helper functions"),
-    cl::location(global.params.betterC));
+    "betterC", cl::ZeroOrMore, cl::location(global.params.betterC),
+    cl::desc("Omit generating some runtime information and helper functions"));
 
 cl::opt<unsigned char, true, CoverageParser> coverageAnalysis(
-    "cov", cl::desc("Compile-in code coverage analysis\n(use -cov=n for n% "
-                    "minimum required coverage)"),
-    cl::location(global.params.covPercent), cl::ValueOptional, cl::init(127));
+    "cov", cl::ZeroOrMore, cl::location(global.params.covPercent),
+    cl::desc("Compile-in code coverage analysis\n(use -cov=n for n% "
+             "minimum required coverage)"),
+    cl::ValueOptional, cl::init(127));
 
 #if LDC_WITH_PGO
 cl::opt<std::string>
@@ -489,22 +474,22 @@ cl::opt<std::string>
                      cl::desc("Generate instrumented code to collect a runtime "
                               "profile into default.profraw (overriden by "
                               "'=<filename>' or LLVM_PROFILE_FILE env var)"),
-                     cl::ValueOptional);
+                     cl::ZeroOrMore, cl::ValueOptional);
 
 cl::opt<std::string> usefileInstrProf(
-    "fprofile-instr-use", cl::value_desc("filename"),
+    "fprofile-instr-use", cl::ZeroOrMore, cl::value_desc("filename"),
     cl::desc("Use instrumentation data for profile-guided optimization"),
     cl::ValueRequired);
 #endif
 
 cl::opt<bool>
-    instrumentFunctions("finstrument-functions",
+    instrumentFunctions("finstrument-functions", cl::ZeroOrMore,
                         cl::desc("Instrument function entry and exit with "
                                  "GCC-compatible profiling calls"));
 
 #if LDC_LLVM_VER >= 309
 cl::opt<LTOKind> ltoMode(
-    "flto", cl::desc("Set LTO mode, requires linker support"),
+    "flto", cl::ZeroOrMore, cl::desc("Set LTO mode, requires linker support"),
     cl::init(LTO_None),
     clEnumValues(
         clEnumValN(LTO_Full, "full", "Merges all input into a single module"),
@@ -563,11 +548,10 @@ void createClashingOptions() {
 
   // Step 2. Add the LDC options.
   new cl::opt<bool, true, FlagParser<bool>>(
-      "color", cl::desc("Force colored console output"),
-      cl::location(global.params.color));
-  new cl::opt<bool, true>(
-      "ffast-math", cl::desc("Set @fastmath for all functions."),
-      cl::location(fFastMath), cl::init(false), cl::ZeroOrMore);
+      "color", cl::ZeroOrMore, cl::location(global.params.color),
+      cl::desc("(*) Force colored console output"));
+  new cl::opt<bool, true>("ffast-math", cl::ZeroOrMore, cl::location(fFastMath),
+                          cl::desc("Set @fastmath for all functions."));
 }
 
 /// Hides command line options exposed from within LLVM that are unlikely
diff --git a/driver/configfile.cpp b/driver/configfile.cpp
index 4959d7d..700ba34 100644
--- a/driver/configfile.cpp
+++ b/driver/configfile.cpp
@@ -31,9 +31,9 @@ namespace sys = llvm::sys;
 
 // dummy only; needs to be parsed manually earlier as the switches contained in
 // the config file are injected into the command line options fed to the parser
-llvm::cl::opt<std::string>
+static llvm::cl::opt<std::string>
     clConf("conf", llvm::cl::desc("Use configuration file <filename>"),
-           llvm::cl::value_desc("filename"));
+           llvm::cl::value_desc("filename"), llvm::cl::ZeroOrMore);
 
 #if _WIN32
 std::string getUserHomeDirectory() {
diff --git a/driver/linker.cpp b/driver/linker.cpp
index fcb7d0c..36199d5 100644
--- a/driver/linker.cpp
+++ b/driver/linker.cpp
@@ -33,23 +33,21 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-static llvm::cl::opt<bool> staticFlag(
-    "static",
-    llvm::cl::desc(
-        "Create a statically linked binary, including all system dependencies"),
-    llvm::cl::ZeroOrMore);
+static llvm::cl::opt<bool>
+    staticFlag("static", llvm::cl::ZeroOrMore,
+               llvm::cl::desc("Create a statically linked binary, including "
+                              "all system dependencies"));
 
 static llvm::cl::opt<std::string> mscrtlib(
-    "mscrtlib",
+    "mscrtlib", llvm::cl::ZeroOrMore, llvm::cl::value_desc("name"),
     llvm::cl::desc(
-        "MS C runtime library to link against (libcmt[d] / msvcrt[d])"),
-    llvm::cl::value_desc("name"), llvm::cl::ZeroOrMore);
+        "MS C runtime library to link against (libcmt[d] / msvcrt[d])"));
 
 static llvm::cl::opt<std::string>
-    ltoLibrary("flto-binary",
+    ltoLibrary("flto-binary", llvm::cl::ZeroOrMore,
                llvm::cl::desc("Set the linker LTO plugin library file (e.g. "
                               "LLVMgold.so (Unixes) or libLTO.dylib (Darwin))"),
-               llvm::cl::value_desc("file"), llvm::cl::ZeroOrMore);
+               llvm::cl::value_desc("file"));
 
 static llvm::cl::opt<std::string> ar("ar", llvm::cl::desc("Archiver"),
                                      llvm::cl::Hidden, llvm::cl::ZeroOrMore);
diff --git a/driver/main.cpp b/driver/main.cpp
index 33f1a65..4a13c40 100644
--- a/driver/main.cpp
+++ b/driver/main.cpp
@@ -81,10 +81,9 @@ using namespace opts;
 
 extern void getenv_setargv(const char *envvar, int *pargc, char ***pargv);
 
-static cl::opt<bool>
-    noDefaultLib("nodefaultlib",
-                 cl::desc("Don't add a default library for linking implicitly"),
-                 cl::ZeroOrMore, cl::Hidden);
+static cl::opt<bool> noDefaultLib(
+    "nodefaultlib", cl::ZeroOrMore, cl::Hidden,
+    cl::desc("Don't add a default library for linking implicitly"));
 
 static StringsAdapter impPathsStore("I", global.params.imppath);
 static cl::list<std::string, StringsAdapter>
@@ -93,19 +92,16 @@ static cl::list<std::string, StringsAdapter>
                 cl::Prefix);
 
 static cl::opt<std::string>
-    defaultLib("defaultlib",
-               cl::desc("Default libraries to link with (overrides previous)"),
-               cl::value_desc("lib1,lib2,..."), cl::ZeroOrMore);
+    defaultLib("defaultlib", cl::ZeroOrMore, cl::value_desc("lib1,lib2,..."),
+               cl::desc("Default libraries to link with (overrides previous)"));
 
 static cl::opt<std::string> debugLib(
-    "debuglib",
-    cl::desc("Debug versions of default libraries (overrides previous)"),
-    cl::value_desc("lib1,lib2,..."), cl::ZeroOrMore);
+    "debuglib", cl::ZeroOrMore, cl::value_desc("lib1,lib2,..."),
+    cl::desc("Debug versions of default libraries (overrides previous)"));
 
 static cl::opt<bool> linkDebugLib(
-    "link-debuglib",
-    cl::desc("Link with libraries specified in -debuglib, not -defaultlib"),
-    cl::ZeroOrMore);
+    "link-debuglib", cl::ZeroOrMore,
+    cl::desc("Link with libraries specified in -debuglib, not -defaultlib"));
 
 #if LDC_LLVM_VER >= 309
 static inline llvm::Optional<llvm::Reloc::Model> getRelocModel() {
diff --git a/driver/toobj.cpp b/driver/toobj.cpp
index 63f4ab3..734d066 100644
--- a/driver/toobj.cpp
+++ b/driver/toobj.cpp
@@ -59,7 +59,8 @@ using LLErrorInfo = std::string;
 #endif
 
 static llvm::cl::opt<bool>
-    NoIntegratedAssembler("no-integrated-as", llvm::cl::Hidden,
+    NoIntegratedAssembler("no-integrated-as", llvm::cl::ZeroOrMore,
+                          llvm::cl::Hidden,
                           llvm::cl::desc("Disable integrated assembler"));
 
 // based on llc code, University of Illinois Open Source License
diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp
index a82b7af..2245a51 100644
--- a/gen/llvmhelpers.cpp
+++ b/gen/llvmhelpers.cpp
@@ -46,7 +46,7 @@
 #include "llvm/Support/CommandLine.h"
 
 llvm::cl::opt<llvm::GlobalVariable::ThreadLocalMode> clThreadModel(
-    "fthread-model", llvm::cl::desc("Thread model"),
+    "fthread-model", llvm::cl::ZeroOrMore, llvm::cl::desc("Thread model"),
     llvm::cl::init(llvm::GlobalVariable::GeneralDynamicTLSModel),
     clEnumValues(clEnumValN(llvm::GlobalVariable::GeneralDynamicTLSModel,
                             "global-dynamic",
diff --git a/gen/modules.cpp b/gen/modules.cpp
index d660bfb..04b8467 100644
--- a/gen/modules.cpp
+++ b/gen/modules.cpp
@@ -54,14 +54,13 @@
 #endif
 
 static llvm::cl::opt<bool, true>
-    preservePaths("op", llvm::cl::desc("Preserve source path for output files"),
-                  llvm::cl::ZeroOrMore,
+    preservePaths("op", llvm::cl::ZeroOrMore,
+                  llvm::cl::desc("Preserve source path for output files"),
                   llvm::cl::location(global.params.preservePaths));
 
 static llvm::cl::opt<bool, true>
-    fqnNames("oq",
+    fqnNames("oq", llvm::cl::ZeroOrMore,
              llvm::cl::desc("Write object files with fully qualified names"),
-             llvm::cl::ZeroOrMore,
              llvm::cl::location(global.params.fullyQualifiedObjectFiles));
 
 void Module::checkAndAddOutputFile(File *file) {
diff --git a/gen/optimizer.cpp b/gen/optimizer.cpp
index 4a61fd2..0296e36 100644
--- a/gen/optimizer.cpp
+++ b/gen/optimizer.cpp
@@ -54,54 +54,46 @@ static cl::opt<signed char> optimizeLevel(
         clEnumValN(-2, "Oz", "Like -Os but reduces code size further")),
     cl::init(0));
 
-static cl::opt<bool> noVerify("disable-verify",
-                              cl::desc("Do not verify result module"),
-                              cl::Hidden);
+static cl::opt<bool> noVerify("disable-verify", cl::ZeroOrMore, cl::Hidden,
+                              cl::desc("Do not verify result module"));
 
 static cl::opt<bool>
-    verifyEach("verify-each",
+    verifyEach("verify-each", cl::ZeroOrMore, cl::Hidden,
                cl::desc("Run verifier after D-specific and explicitly "
-                        "specified optimization passes"),
-               cl::Hidden, cl::ZeroOrMore);
+                        "specified optimization passes"));
 
 static cl::opt<bool>
-    disableLangSpecificPasses("disable-d-passes",
-                              cl::desc("Disable all D-specific passes"),
-                              cl::ZeroOrMore);
+    disableLangSpecificPasses("disable-d-passes", cl::ZeroOrMore,
+                              cl::desc("Disable all D-specific passes"));
 
 static cl::opt<bool> disableSimplifyDruntimeCalls(
-    "disable-simplify-drtcalls",
-    cl::desc("Disable simplification of druntime calls"), cl::ZeroOrMore);
+    "disable-simplify-drtcalls", cl::ZeroOrMore,
+    cl::desc("Disable simplification of druntime calls"));
 
 static cl::opt<bool> disableSimplifyLibCalls(
-    "disable-simplify-libcalls",
-    cl::desc("Disable simplification of well-known C runtime calls"),
-    cl::ZeroOrMore);
+    "disable-simplify-libcalls", cl::ZeroOrMore,
+    cl::desc("Disable simplification of well-known C runtime calls"));
 
 static cl::opt<bool> disableGCToStack(
-    "disable-gc2stack",
-    cl::desc("Disable promotion of GC allocations to stack memory"),
-    cl::ZeroOrMore);
+    "disable-gc2stack", cl::ZeroOrMore,
+    cl::desc("Disable promotion of GC allocations to stack memory"));
 
 static cl::opt<cl::boolOrDefault, false, opts::FlagParser<cl::boolOrDefault>>
     enableInlining(
-        "inlining",
-        cl::desc("Enable function inlining (default in -O2 and higher)"),
-        cl::ZeroOrMore);
+        "inlining", cl::ZeroOrMore,
+        cl::desc("(*) Enable function inlining (default in -O2 and higher)"));
 
-static llvm::cl::opt<llvm::cl::boolOrDefault, false,
-                     opts::FlagParser<llvm::cl::boolOrDefault>>
+static cl::opt<cl::boolOrDefault, false, opts::FlagParser<cl::boolOrDefault>>
     enableCrossModuleInlining(
-        "cross-module-inlining",
-        llvm::cl::desc("Enable cross-module function inlining (default "
-                       "disabled) (LLVM >= 3.7)"),
-        llvm::cl::ZeroOrMore, llvm::cl::Hidden);
+        "cross-module-inlining", cl::ZeroOrMore, cl::Hidden,
+        cl::desc("(*) Enable cross-module function inlining (default disabled) "
+                 "(LLVM >= 3.7)"));
 
 static cl::opt<bool> unitAtATime("unit-at-a-time", cl::desc("Enable basic IPO"),
-                                 cl::init(true));
+                                 cl::ZeroOrMore, cl::init(true));
 
 static cl::opt<bool> stripDebug(
-    "strip-debug",
+    "strip-debug", cl::ZeroOrMore,
     cl::desc("Strip symbolic debug information before optimization"));
 
 cl::opt<opts::SanitizerCheck> opts::sanitize(
@@ -113,17 +105,15 @@ cl::opt<opts::SanitizerCheck> opts::sanitize(
                             "Race detection")));
 
 static cl::opt<bool> disableLoopUnrolling(
-    "disable-loop-unrolling",
-    cl::desc("Disable loop unrolling in all relevant passes"), cl::init(false));
+    "disable-loop-unrolling", cl::ZeroOrMore,
+    cl::desc("Disable loop unrolling in all relevant passes"));
 static cl::opt<bool>
-    disableLoopVectorization("disable-loop-vectorization",
-                             cl::desc("Disable the loop vectorization pass"),
-                             cl::init(false));
+    disableLoopVectorization("disable-loop-vectorization", cl::ZeroOrMore,
+                             cl::desc("Disable the loop vectorization pass"));
 
 static cl::opt<bool>
-    disableSLPVectorization("disable-slp-vectorization",
-                            cl::desc("Disable the slp vectorization pass"),
-                            cl::init(false));
+    disableSLPVectorization("disable-slp-vectorization", cl::ZeroOrMore,
+                            cl::desc("Disable the slp vectorization pass"));
 
 unsigned optLevel() {
   // Use -O2 as a base for the size-optimization levels.
diff --git a/gen/passes/GarbageCollect2Stack.cpp b/gen/passes/GarbageCollect2Stack.cpp
index 317af9f..a55c188 100644
--- a/gen/passes/GarbageCollect2Stack.cpp
+++ b/gen/passes/GarbageCollect2Stack.cpp
@@ -54,7 +54,8 @@ STATISTIC(NumDeleted,
           "Number of GC calls deleted because the return value was unused");
 
 static cl::opt<unsigned>
-    SizeLimit("dgc2stack-size-limit", cl::init(1024), cl::Hidden,
+    SizeLimit("dgc2stack-size-limit", cl::ZeroOrMore, cl::Hidden,
+              cl::init(1024),
               cl::desc("Require allocs to be smaller than n bytes to be "
                        "promoted, 0 to ignore."));
 
diff --git a/gen/pgo.cpp b/gen/pgo.cpp
index 74d3822..31f60b1 100644
--- a/gen/pgo.cpp
+++ b/gen/pgo.cpp
@@ -37,9 +37,9 @@
 #if LDC_LLVM_VER >= 309
 namespace {
 llvm::cl::opt<bool, false, opts::FlagParser<bool>> enablePGOIndirectCalls(
-    "pgo-indirect-calls",
+    "pgo-indirect-calls", llvm::cl::ZeroOrMore, llvm::cl::Hidden,
     llvm::cl::desc("(*) Enable PGO of indirect calls (LLVM >= 3.9)"),
-    llvm::cl::init(true), llvm::cl::Hidden);
+    llvm::cl::init(true));
 }
 #endif
 
diff --git a/gen/runtime.cpp b/gen/runtime.cpp
index 367efe9..5efc4ad 100644
--- a/gen/runtime.cpp
+++ b/gen/runtime.cpp
@@ -43,10 +43,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 static llvm::cl::opt<bool> nogc(
-    "nogc",
+    "nogc", llvm::cl::ZeroOrMore,
     llvm::cl::desc(
-        "Do not allow code that generates implicit garbage collector calls"),
-    llvm::cl::ZeroOrMore);
+        "Do not allow code that generates implicit garbage collector calls"));
 
 ////////////////////////////////////////////////////////////////////////////////
 
diff --git a/gen/toir.cpp b/gen/toir.cpp
index 2108ae2..e155bb3 100644
--- a/gen/toir.cpp
+++ b/gen/toir.cpp
@@ -56,9 +56,8 @@
 #include "ctfe.h"
 
 llvm::cl::opt<bool> checkPrintf(
-    "check-printf-calls",
-    llvm::cl::desc("Validate printf call format strings against arguments"),
-    llvm::cl::ZeroOrMore);
+    "check-printf-calls", llvm::cl::ZeroOrMore,
+    llvm::cl::desc("Validate printf call format strings against arguments"));
 
 bool walkPostorder(Expression *e, StoppableVisitor *v);
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git



More information about the pkg-d-commits mailing list