mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-29 22:50:55 +00:00
f94b3480fc
ErrorOr had quiet a bit of complexity and indirection to be able to hold a user type with the error. That feature is not used anymore. This patch removes it, it will live in svn history if we ever need it again. If we do need it again, IMHO there is one thing that should be done differently: Holding extra info in the error is not a property a function also returning a value or not. The ability to hold extra info should be in the error type and ErrorOr templated over it so that we don't need the funny looking ErrorOr<void>. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194030 91177308-0d34-0410-b5e6-96231b3b80d8
67 lines
1.3 KiB
C++
67 lines
1.3 KiB
C++
//===- unittests/ErrorOrTest.cpp - ErrorOr.h tests ------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/ErrorOr.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#include <memory>
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
ErrorOr<int> t1() {return 1;}
|
|
ErrorOr<int> t2() { return errc::invalid_argument; }
|
|
|
|
TEST(ErrorOr, SimpleValue) {
|
|
ErrorOr<int> a = t1();
|
|
EXPECT_TRUE(a);
|
|
EXPECT_EQ(1, *a);
|
|
|
|
a = t2();
|
|
EXPECT_FALSE(a);
|
|
EXPECT_EQ(errc::invalid_argument, a);
|
|
#ifdef EXPECT_DEBUG_DEATH
|
|
EXPECT_DEBUG_DEATH(*a, "Cannot get value when an error exists");
|
|
#endif
|
|
}
|
|
|
|
#if LLVM_HAS_CXX11_STDLIB
|
|
ErrorOr<std::unique_ptr<int> > t3() {
|
|
return std::unique_ptr<int>(new int(3));
|
|
}
|
|
#endif
|
|
|
|
TEST(ErrorOr, Types) {
|
|
int x;
|
|
ErrorOr<int&> a(x);
|
|
*a = 42;
|
|
EXPECT_EQ(42, x);
|
|
|
|
#if LLVM_HAS_CXX11_STDLIB
|
|
// Move only types.
|
|
EXPECT_EQ(3, **t3());
|
|
#endif
|
|
}
|
|
|
|
struct B {};
|
|
struct D : B {};
|
|
|
|
TEST(ErrorOr, Covariant) {
|
|
ErrorOr<B*> b(ErrorOr<D*>(0));
|
|
b = ErrorOr<D*>(0);
|
|
|
|
#if LLVM_HAS_CXX11_STDLIB
|
|
ErrorOr<std::unique_ptr<B> > b1(ErrorOr<std::unique_ptr<D> >(0));
|
|
b1 = ErrorOr<std::unique_ptr<D> >(0);
|
|
#endif
|
|
}
|
|
} // end anon namespace
|