Date: Mon, 22 May 2017 19:44:21 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r318673 - in vendor/lldb/dist: include/lldb/Utility packages/Python/lldbsuite/test source/Core source/Utility unittests/Utility Message-ID: <201705221944.v4MJiLc4077047@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Mon May 22 19:44:21 2017 New Revision: 318673 URL: https://svnweb.freebsd.org/changeset/base/318673 Log: Vendor import of lldb trunk r303571: https://llvm.org/svn/llvm-project/lldb/trunk@303571 Modified: vendor/lldb/dist/include/lldb/Utility/Status.h vendor/lldb/dist/packages/Python/lldbsuite/test/configuration.py vendor/lldb/dist/source/Core/IOHandler.cpp vendor/lldb/dist/source/Utility/Status.cpp vendor/lldb/dist/unittests/Utility/StatusTest.cpp Modified: vendor/lldb/dist/include/lldb/Utility/Status.h ============================================================================== --- vendor/lldb/dist/include/lldb/Utility/Status.h Mon May 22 19:44:18 2017 (r318672) +++ vendor/lldb/dist/include/lldb/Utility/Status.h Mon May 22 19:44:21 2017 (r318673) @@ -1,5 +1,4 @@ -//===-- Status.h -------------------------------------------------*- C++ -//-*-===// +//===-- Status.h ------------------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -8,22 +7,20 @@ // //===----------------------------------------------------------------------===// -#ifndef __DCError_h__ -#define __DCError_h__ -#if defined(__cplusplus) +#ifndef LLDB_UTILITY_STATUS_H +#define LLDB_UTILITY_STATUS_H #include "lldb/lldb-defines.h" #include "lldb/lldb-enumerations.h" // for ErrorType, ErrorType... #include "llvm/ADT/StringRef.h" // for StringRef +#include "llvm/Support/Error.h" #include "llvm/Support/FormatVariadic.h" - #include <cstdarg> +#include <stdint.h> // for uint32_t #include <string> #include <system_error> // for error_code #include <type_traits> // for forward -#include <stdint.h> // for uint32_t - namespace llvm { class raw_ostream; } @@ -106,6 +103,10 @@ public: ~Status(); + // llvm::Error support + explicit Status(llvm::Error error); + llvm::Error ToError() const; + //------------------------------------------------------------------ /// Get the error string associated with the current error. // @@ -274,5 +275,4 @@ template <> struct format_provider<lldb_ }; } -#endif // #if defined(__cplusplus) -#endif // #ifndef __DCError_h__ +#endif // #ifndef LLDB_UTILITY_STATUS_H Modified: vendor/lldb/dist/packages/Python/lldbsuite/test/configuration.py ============================================================================== --- vendor/lldb/dist/packages/Python/lldbsuite/test/configuration.py Mon May 22 19:44:18 2017 (r318672) +++ vendor/lldb/dist/packages/Python/lldbsuite/test/configuration.py Mon May 22 19:44:21 2017 (r318673) @@ -44,7 +44,7 @@ def setupCrashInfoHook(): if not os.path.isfile(dylib_dst) or os.path.getmtime( dylib_dst) < os.path.getmtime(dylib_src): # we need to compile - cmd = "SDKROOT= xcrun clang %s -o %s -framework Python -Xlinker -dylib -iframework /System/Library/Frameworks/ -Xlinker -F /System/Library/Frameworks/" % ( + cmd = "SDKROOT= xcrun clang %s -o %s -framework Python -Xlinker -dylib" % ( dylib_src, dylib_dst) if subprocess.call( cmd, shell=True) != 0 or not os.path.isfile(dylib_dst): Modified: vendor/lldb/dist/source/Core/IOHandler.cpp ============================================================================== --- vendor/lldb/dist/source/Core/IOHandler.cpp Mon May 22 19:44:18 2017 (r318672) +++ vendor/lldb/dist/source/Core/IOHandler.cpp Mon May 22 19:44:21 2017 (r318673) @@ -4640,7 +4640,7 @@ void IOHandlerCursesGUI::Activate() { WindowSP threads_window_sp( main_window_sp->CreateSubWindow("Threads", threads_bounds, false)); WindowSP status_window_sp( - main_window_sp->CreateSubWindow("Error", status_bounds, false)); + main_window_sp->CreateSubWindow("Status", status_bounds, false)); status_window_sp->SetCanBeActive( false); // Don't let the status bar become the active window main_window_sp->SetDelegate( Modified: vendor/lldb/dist/source/Utility/Status.cpp ============================================================================== --- vendor/lldb/dist/source/Utility/Status.cpp Mon May 22 19:44:18 2017 (r318672) +++ vendor/lldb/dist/source/Utility/Status.cpp Mon May 22 19:44:21 2017 (r318673) @@ -56,6 +56,37 @@ Status::Status(const char *format, ...) va_end(args); } +Status::Status(llvm::Error error) + : m_code(0), m_type(ErrorType::eErrorTypeGeneric) { + if (!error) + return; + + // if the error happens to be a errno error, preserve the error code + error = llvm::handleErrors( + std::move(error), [&](std::unique_ptr<llvm::ECError> e) -> llvm::Error { + std::error_code ec = e->convertToErrorCode(); + if (ec.category() == std::generic_category()) { + m_code = ec.value(); + m_type = ErrorType::eErrorTypePOSIX; + return llvm::Error::success(); + } + return llvm::Error(std::move(e)); + }); + + // Otherwise, just preserve the message + if (error) + SetErrorString(llvm::toString(std::move(error))); +} + +llvm::Error Status::ToError() const { + if (Success()) + return llvm::Error::success(); + if (m_type == ErrorType::eErrorTypePOSIX) + return llvm::errorCodeToError(std::error_code(m_code, std::generic_category())); + return llvm::make_error<llvm::StringError>(AsCString(), + llvm::inconvertibleErrorCode()); +} + //---------------------------------------------------------------------- // Assignment operator //---------------------------------------------------------------------- Modified: vendor/lldb/dist/unittests/Utility/StatusTest.cpp ============================================================================== --- vendor/lldb/dist/unittests/Utility/StatusTest.cpp Mon May 22 19:44:18 2017 (r318672) +++ vendor/lldb/dist/unittests/Utility/StatusTest.cpp Mon May 22 19:44:21 2017 (r318673) @@ -11,9 +11,40 @@ #include "gtest/gtest.h" using namespace lldb_private; +using namespace lldb; TEST(StatusTest, Formatv) { EXPECT_EQ("", llvm::formatv("{0}", Status()).str()); EXPECT_EQ("Hello Status", llvm::formatv("{0}", Status("Hello Status")).str()); EXPECT_EQ("Hello", llvm::formatv("{0:5}", Status("Hello Error")).str()); } + +TEST(StatusTest, ErrorConstructor) { + EXPECT_TRUE(Status(llvm::Error::success()).Success()); + + Status eagain( + llvm::errorCodeToError(std::error_code(EAGAIN, std::generic_category()))); + EXPECT_TRUE(eagain.Fail()); + EXPECT_EQ(eErrorTypePOSIX, eagain.GetType()); + EXPECT_EQ(Status::ValueType(EAGAIN), eagain.GetError()); + + Status foo(llvm::make_error<llvm::StringError>( + "foo", llvm::inconvertibleErrorCode())); + EXPECT_TRUE(foo.Fail()); + EXPECT_EQ(eErrorTypeGeneric, foo.GetType()); + EXPECT_STREQ("foo", foo.AsCString()); +} + +TEST(StatusTest, ErrorConversion) { + EXPECT_FALSE(bool(Status().ToError())); + + llvm::Error eagain = Status(EAGAIN, ErrorType::eErrorTypePOSIX).ToError(); + EXPECT_TRUE(bool(eagain)); + std::error_code ec = llvm::errorToErrorCode(std::move(eagain)); + EXPECT_EQ(EAGAIN, ec.value()); + EXPECT_EQ(std::generic_category(), ec.category()); + + llvm::Error foo = Status("foo").ToError(); + EXPECT_TRUE(bool(foo)); + EXPECT_EQ("foo", llvm::toString(std::move(foo))); +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201705221944.v4MJiLc4077047>