aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Support/ErrorOr.h
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2013-03-18 17:36:31 -0700
committerStephen Hines <srhines@google.com>2013-03-18 17:36:31 -0700
commit2d4629c5d7dcc6582fa7b85a517744f1a3654eba (patch)
tree90c0395880593bf195fb818c2af1139cb7e846df /include/llvm/Support/ErrorOr.h
parentcd4c0bff77a9b5617896982e99dc80f469e26e4f (diff)
parent242cec5be3b3a715de0535d1a074bb4dff94772f (diff)
downloadexternal_llvm-2d4629c5d7dcc6582fa7b85a517744f1a3654eba.zip
external_llvm-2d4629c5d7dcc6582fa7b85a517744f1a3654eba.tar.gz
external_llvm-2d4629c5d7dcc6582fa7b85a517744f1a3654eba.tar.bz2
Merge branch 'upstream' into merge_2013_03_18
Diffstat (limited to 'include/llvm/Support/ErrorOr.h')
-rw-r--r--include/llvm/Support/ErrorOr.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/include/llvm/Support/ErrorOr.h b/include/llvm/Support/ErrorOr.h
index ceec33d..f3ac305 100644
--- a/include/llvm/Support/ErrorOr.h
+++ b/include/llvm/Support/ErrorOr.h
@@ -180,6 +180,16 @@ private:
public:
ErrorOr() : IsValid(false) {}
+ template <class E>
+ ErrorOr(E ErrorCode, typename enable_if_c<is_error_code_enum<E>::value ||
+ is_error_condition_enum<E>::value,
+ void *>::type = 0)
+ : HasError(true), IsValid(true) {
+ Error = new ErrorHolderBase;
+ Error->Error = make_error_code(ErrorCode);
+ Error->HasUserData = false;
+ }
+
ErrorOr(llvm::error_code EC) : HasError(true), IsValid(true) {
Error = new ErrorHolderBase;
Error->Error = EC;
@@ -387,6 +397,22 @@ class ErrorOr<void> {
public:
ErrorOr() : Error(0, 0) {}
+ template <class E>
+ ErrorOr(E ErrorCode, typename enable_if_c<is_error_code_enum<E>::value ||
+ is_error_condition_enum<E>::value,
+ void *> ::type = 0)
+ : Error(0, 0) {
+ error_code EC = make_error_code(ErrorCode);
+ if (EC == errc::success) {
+ Error.setInt(1);
+ return;
+ }
+ ErrorHolderBase *EHB = new ErrorHolderBase;
+ EHB->Error = EC;
+ EHB->HasUserData = false;
+ Error.setPointer(EHB);
+ }
+
ErrorOr(llvm::error_code EC) : Error(0, 0) {
if (EC == errc::success) {
Error.setInt(1);