diff --git a/include/llvm/Object/Error.h b/include/llvm/Object/Error.h index fbaf71c17b8..32b834f2154 100644 --- a/include/llvm/Object/Error.h +++ b/include/llvm/Object/Error.h @@ -22,17 +22,16 @@ namespace object { const error_category &object_category(); struct object_error { -enum _ { - success = 0, - invalid_file_type, - parse_failed, - unexpected_eof -}; - _ v_; + enum Impl { + success = 0, + invalid_file_type, + parse_failed, + unexpected_eof + }; + Impl V; - object_error(_ v) : v_(v) {} - explicit object_error(int v) : v_(_(v)) {} - operator int() const {return v_;} + object_error(Impl V) : V(V) {} + operator Impl() const { return V; } }; inline error_code make_error_code(object_error e) { @@ -43,7 +42,8 @@ inline error_code make_error_code(object_error e) { template <> struct is_error_code_enum : true_type { }; -template <> struct is_error_code_enum : true_type { }; +template <> struct is_error_code_enum : true_type { +}; } // end namespace llvm. diff --git a/lib/Object/Error.cpp b/lib/Object/Error.cpp index 25946257ab5..7005a72d68b 100644 --- a/lib/Object/Error.cpp +++ b/lib/Object/Error.cpp @@ -31,7 +31,8 @@ const char *_object_error_category::name() const { } std::string _object_error_category::message(int ev) const { - switch (ev) { + object_error::Impl E = static_cast(ev); + switch (E) { case object_error::success: return "Success"; case object_error::invalid_file_type: return "The file was not recognized as a valid object file"; @@ -39,10 +40,9 @@ std::string _object_error_category::message(int ev) const { return "Invalid data was encountered while parsing the file"; case object_error::unexpected_eof: return "The end of the file was unexpectedly encountered"; - default: - llvm_unreachable("An enumerator of object_error does not have a message " - "defined."); } + llvm_unreachable("An enumerator of object_error does not have a message " + "defined."); } error_condition _object_error_category::default_error_condition(int ev) const {