From 31d91447d88da36ae4087b645e0ef2bc6079e4a5 Mon Sep 17 00:00:00 2001 From: James Henderson Date: Fri, 1 Feb 2019 10:38:40 +0000 Subject: [PATCH] Revert r352750. This was causing a build bot failure: http://green.lab.llvm.org/green/job/clang-stage2-Rthinlto/15346/ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@352848 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/CommandLine.cpp | 32 +----- tools/llvm-symbolizer/llvm-symbolizer.cpp | 2 +- unittests/Support/CommandLineTest.cpp | 134 ---------------------- 3 files changed, 6 insertions(+), 162 deletions(-) diff --git a/lib/Support/CommandLine.cpp b/lib/Support/CommandLine.cpp index 886595e30a5..f8bc6a8f615 100644 --- a/lib/Support/CommandLine.cpp +++ b/lib/Support/CommandLine.cpp @@ -1663,35 +1663,13 @@ size_t generic_parser_base::getOptionWidth(const Option &O) const { void generic_parser_base::printOptionInfo(const Option &O, size_t GlobalWidth) const { if (O.hasArgStr()) { - // When the value is optional, first print a line just describing the option - // without values. - if (O.getValueExpectedFlag() == ValueOptional) { - for (unsigned i = 0, e = getNumOptions(); i != e; ++i) { - if (getOption(i).empty()) { - outs() << " -" << O.ArgStr; - Option::printHelpStr(O.HelpStr, GlobalWidth, O.ArgStr.size() + 6); - break; - } - } - } + outs() << " -" << O.ArgStr; + Option::printHelpStr(O.HelpStr, GlobalWidth, O.ArgStr.size() + 6); - outs() << " -" << O.ArgStr << "="; - Option::printHelpStr(O.HelpStr, GlobalWidth, O.ArgStr.size() + 14); for (unsigned i = 0, e = getNumOptions(); i != e; ++i) { - StringRef ValueName = getOption(i); - StringRef Description = getDescription(i); - if (O.getValueExpectedFlag() == ValueOptional && ValueName.empty() && - Description.empty()) - continue; - size_t NumSpaces = GlobalWidth - ValueName.size() - 8; - outs() << " =" << ValueName; - if (ValueName.empty()) { - outs() << ""; - NumSpaces -= 7; - } - if (!Description.empty()) - outs().indent(NumSpaces) << " - " << Description; - outs() << '\n'; + size_t NumSpaces = GlobalWidth - getOption(i).size() - 8; + outs() << " =" << getOption(i); + outs().indent(NumSpaces) << " - " << getDescription(i) << '\n'; } } else { if (!O.HelpStr.empty()) diff --git a/tools/llvm-symbolizer/llvm-symbolizer.cpp b/tools/llvm-symbolizer/llvm-symbolizer.cpp index 0b0b8a68a4a..15b2b9dddd4 100644 --- a/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -38,7 +38,7 @@ ClUseSymbolTable("use-symbol-table", cl::init(true), static cl::opt ClPrintFunctions( "functions", cl::init(FunctionNameKind::LinkageName), - cl::desc("Print function name for a given address"), cl::ValueOptional, + cl::desc("Print function name for a given address:"), cl::ValueOptional, cl::values(clEnumValN(FunctionNameKind::None, "none", "omit function name"), clEnumValN(FunctionNameKind::ShortName, "short", "print short function name"), diff --git a/unittests/Support/CommandLineTest.cpp b/unittests/Support/CommandLineTest.cpp index 8f8e1bad7b6..416e0eef5bf 100644 --- a/unittests/Support/CommandLineTest.cpp +++ b/unittests/Support/CommandLineTest.cpp @@ -13,7 +13,6 @@ #include "llvm/Config/config.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/InitLLVM.h" -#include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/Program.h" #include "llvm/Support/StringSaver.h" @@ -840,137 +839,4 @@ TEST(CommandLineTest, GetCommandLineArguments) { } #endif -class OutputRedirector { -public: - OutputRedirector(int RedirectFD) - : RedirectFD(RedirectFD), OldFD(dup(RedirectFD)) { - if (OldFD == -1 || - sys::fs::createTemporaryFile("unittest-redirect", "", NewFD, - FilePath) || - dup2(NewFD, RedirectFD) == -1) - Valid = false; - } - - ~OutputRedirector() { - dup2(OldFD, RedirectFD); - close(OldFD); - close(NewFD); - } - - SmallVector FilePath; - bool Valid = true; - -private: - int RedirectFD; - int OldFD; - int NewFD; -}; - -struct AutoDeleteFile { - SmallVector FilePath; - ~AutoDeleteFile() { - if (!FilePath.empty()) - sys::fs::remove(std::string(FilePath.data(), FilePath.size())); - } -}; - -class PrintOptionInfoTest : public ::testing::Test { -public: - // Return std::string because the output of a failing EXPECT check is - // unreadable for StringRef. It also avoids any lifetime issues. - template std::string runTest(Ts... OptionAttributes) { - AutoDeleteFile File; - { - OutputRedirector Stdout(fileno(stdout)); - if (!Stdout.Valid) - return ""; - File.FilePath = Stdout.FilePath; - - StackOption TestOption(Opt, cl::desc(HelpText), - OptionAttributes...); - printOptionInfo(TestOption, 25); - outs().flush(); - } - auto Buffer = MemoryBuffer::getFile(File.FilePath); - if (!Buffer) - return ""; - return Buffer->get()->getBuffer().str(); - } - - enum class OptionValue { Val }; - const StringRef Opt = "some-option"; - const StringRef HelpText = "some help"; - -private: - // This is a workaround for cl::Option sub-classes having their - // printOptionInfo functions private. - void printOptionInfo(const cl::Option &O, size_t Width) { - O.printOptionInfo(Width); - } -}; - -TEST_F(PrintOptionInfoTest, PrintOptionInfoValueOptionalWithoutSentinel) { - std::string Output = - runTest(cl::ValueOptional, - cl::values(clEnumValN(OptionValue::Val, "v1", "desc1"))); - - // clang-format off - EXPECT_EQ(Output, (" -" + Opt + "= - " + HelpText + "\n" - " =v1 - desc1\n") - .str()); - // clang-format on -} - -TEST_F(PrintOptionInfoTest, PrintOptionInfoValueOptionalWithSentinel) { - std::string Output = runTest( - cl::ValueOptional, cl::values(clEnumValN(OptionValue::Val, "v1", "desc1"), - clEnumValN(OptionValue::Val, "", ""))); - - // clang-format off - EXPECT_EQ(Output, - (" -" + Opt + " - " + HelpText + "\n" - " -" + Opt + "= - " + HelpText + "\n" - " =v1 - desc1\n") - .str()); - // clang-format on -} - -TEST_F(PrintOptionInfoTest, PrintOptionInfoValueOptionalWithSentinelWithHelp) { - std::string Output = runTest( - cl::ValueOptional, cl::values(clEnumValN(OptionValue::Val, "v1", "desc1"), - clEnumValN(OptionValue::Val, "", "desc2"))); - - // clang-format off - EXPECT_EQ(Output, (" -" + Opt + " - " + HelpText + "\n" - " -" + Opt + "= - " + HelpText + "\n" - " =v1 - desc1\n" - " = - desc2\n") - .str()); - // clang-format on -} - -TEST_F(PrintOptionInfoTest, PrintOptionInfoValueRequiredWithEmptyValueName) { - std::string Output = runTest( - cl::ValueRequired, cl::values(clEnumValN(OptionValue::Val, "v1", "desc1"), - clEnumValN(OptionValue::Val, "", ""))); - - // clang-format off - EXPECT_EQ(Output, (" -" + Opt + "= - " + HelpText + "\n" - " =v1 - desc1\n" - " =\n") - .str()); - // clang-format on -} - -TEST_F(PrintOptionInfoTest, PrintOptionInfoEmptyValueDescription) { - std::string Output = runTest( - cl::ValueRequired, cl::values(clEnumValN(OptionValue::Val, "v1", ""))); - - // clang-format off - EXPECT_EQ(Output, - (" -" + Opt + "= - " + HelpText + "\n" - " =v1\n").str()); - // clang-format on -} - } // anonymous namespace -- 2.50.1