1046d0bdaf01b114e7536a802f3c3dc5862ec5c7bMikhail Glushenkov//===---------------------------- system_error ------------------*- C++ -*-===// 2bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// 3bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// The LLVM Compiler Infrastructure 4bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// 5bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// This file is distributed under the University of Illinois Open Source 6bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// License. See LICENSE.TXT for details. 7bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// 8bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//===----------------------------------------------------------------------===// 9bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// 10fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// This was lifted from libc++ and modified for C++03. This is called 11fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// system_error even though it does not define that class because that's what 12fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// it's called in C++0x. We don't define system_error because it is only used 13fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// for exception handling, which we don't use in LLVM. 14bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// 15bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//===----------------------------------------------------------------------===// 16bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 17674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_SUPPORT_SYSTEM_ERROR_H 18674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_SUPPORT_SYSTEM_ERROR_H 19bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 20f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper#include "llvm/Support/Compiler.h" 21f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper 22bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer/* 23bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error synopsis 24bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 25bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencernamespace std 26bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 27bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 28bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_category 29bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 30bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 31bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual ~error_category(); 32bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 33bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_category(const error_category&) = delete; 34bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_category& operator=(const error_category&) = delete; 35bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 36bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual const char* name() const = 0; 37bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual error_condition default_error_condition(int ev) const; 38bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual bool equivalent(int code, const error_condition& condition) const; 39bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual bool equivalent(const error_code& code, int condition) const; 40bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual std::string message(int ev) const = 0; 41bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 42bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bool operator==(const error_category& rhs) const; 43bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bool operator!=(const error_category& rhs) const; 44bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bool operator<(const error_category& rhs) const; 45bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 46bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 47bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& generic_category(); 48bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& system_category(); 49bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 50bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class T> struct is_error_code_enum 51bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer : public false_type {}; 52bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 53bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class T> struct is_error_condition_enum 54bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer : public false_type {}; 55bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 56bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_code 57bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 58bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 59bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer // constructors: 60bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code(); 61bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code(int val, const error_category& cat); 62bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class ErrorCodeEnum> 63bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code(ErrorCodeEnum e); 64bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 65bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer // modifiers: 66bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void assign(int val, const error_category& cat); 67bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class ErrorCodeEnum> 68bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code& operator=(ErrorCodeEnum e); 69bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void clear(); 70bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 71bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer // observers: 72bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer int value() const; 73bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_category& category() const; 74bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition default_error_condition() const; 75bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer std::string message() const; 76bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer explicit operator bool() const; 77bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 78bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 79bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// non-member functions: 80bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator<(const error_code& lhs, const error_code& rhs); 81bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class charT, class traits> 82bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer basic_ostream<charT,traits>& 83bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operator<<(basic_ostream<charT,traits>& os, const error_code& ec); 84bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 85bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_condition 86bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 87bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 88bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer // constructors: 89bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition(); 90bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition(int val, const error_category& cat); 91bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class ErrorConditionEnum> 92bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition(ErrorConditionEnum e); 93bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 94bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer // modifiers: 95bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void assign(int val, const error_category& cat); 96bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class ErrorConditionEnum> 97bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition& operator=(ErrorConditionEnum e); 98bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void clear(); 99bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 100bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer // observers: 101bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer int value() const; 102bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_category& category() const; 103bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer std::string message() const; 104bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer explicit operator bool() const; 105bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 106bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 107bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator<(const error_condition& lhs, const error_condition& rhs); 108bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 109bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass system_error 110bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer : public runtime_error 111bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 112bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 113bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error(error_code ec, const std::string& what_arg); 114bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error(error_code ec, const char* what_arg); 115bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error(error_code ec); 116bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error(int ev, const error_category& ecat, const std::string& what_arg); 117bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error(int ev, const error_category& ecat, const char* what_arg); 118bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer system_error(int ev, const error_category& ecat); 119bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 120bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_code& code() const throw(); 121bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const char* what() const throw(); 122bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 123bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 124bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerenum class errc 125bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 126bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer address_family_not_supported, // EAFNOSUPPORT 127bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer address_in_use, // EADDRINUSE 128bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer address_not_available, // EADDRNOTAVAIL 129bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer already_connected, // EISCONN 130bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer argument_list_too_long, // E2BIG 131bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer argument_out_of_domain, // EDOM 132bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bad_address, // EFAULT 133bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bad_file_descriptor, // EBADF 134bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bad_message, // EBADMSG 135bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer broken_pipe, // EPIPE 136bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_aborted, // ECONNABORTED 137bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_already_in_progress, // EALREADY 138bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_refused, // ECONNREFUSED 139bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_reset, // ECONNRESET 140bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer cross_device_link, // EXDEV 141bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer destination_address_required, // EDESTADDRREQ 142bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer device_or_resource_busy, // EBUSY 143bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer directory_not_empty, // ENOTEMPTY 144bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer executable_format_error, // ENOEXEC 145bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer file_exists, // EEXIST 146bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer file_too_large, // EFBIG 147bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer filename_too_long, // ENAMETOOLONG 148bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer function_not_supported, // ENOSYS 149bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer host_unreachable, // EHOSTUNREACH 150bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer identifier_removed, // EIDRM 151bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer illegal_byte_sequence, // EILSEQ 152bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer inappropriate_io_control_operation, // ENOTTY 153bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer interrupted, // EINTR 154bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer invalid_argument, // EINVAL 155bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer invalid_seek, // ESPIPE 156bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer io_error, // EIO 157bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer is_a_directory, // EISDIR 158bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer message_size, // EMSGSIZE 159bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer network_down, // ENETDOWN 160bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer network_reset, // ENETRESET 161bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer network_unreachable, // ENETUNREACH 162bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_buffer_space, // ENOBUFS 163bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_child_process, // ECHILD 164bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_link, // ENOLINK 165bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_lock_available, // ENOLCK 166bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_message_available, // ENODATA 167bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_message, // ENOMSG 168bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_protocol_option, // ENOPROTOOPT 169bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_space_on_device, // ENOSPC 170bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_stream_resources, // ENOSR 171bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_device_or_address, // ENXIO 172bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_device, // ENODEV 173bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_file_or_directory, // ENOENT 174bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_process, // ESRCH 175bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_directory, // ENOTDIR 176bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_socket, // ENOTSOCK 177bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_stream, // ENOSTR 178bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_connected, // ENOTCONN 179bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_enough_memory, // ENOMEM 180bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_supported, // ENOTSUP 181bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_canceled, // ECANCELED 182bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_in_progress, // EINPROGRESS 183bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_not_permitted, // EPERM 184bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_not_supported, // EOPNOTSUPP 185bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_would_block, // EWOULDBLOCK 186bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer owner_dead, // EOWNERDEAD 187bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer permission_denied, // EACCES 188bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer protocol_error, // EPROTO 189bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer protocol_not_supported, // EPROTONOSUPPORT 190bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer read_only_file_system, // EROFS 191bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer resource_deadlock_would_occur, // EDEADLK 192bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer resource_unavailable_try_again, // EAGAIN 193bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer result_out_of_range, // ERANGE 194bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer state_not_recoverable, // ENOTRECOVERABLE 195bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer stream_timeout, // ETIME 196bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer text_file_busy, // ETXTBSY 197bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer timed_out, // ETIMEDOUT 198bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_files_open_in_system, // ENFILE 199bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_files_open, // EMFILE 200bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_links, // EMLINK 201bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_symbolic_link_levels, // ELOOP 202bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer value_too_large, // EOVERFLOW 203bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer wrong_protocol_type // EPROTOTYPE 204bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 205bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 206bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_condition_enum<errc> : true_type { } 207bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 208bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencererror_code make_error_code(errc e); 209bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencererror_condition make_error_condition(errc e); 210bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 211bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// Comparison operators: 212bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_code& lhs, const error_code& rhs); 213bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_code& lhs, const error_condition& rhs); 214bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_condition& lhs, const error_code& rhs); 215bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_condition& lhs, const error_condition& rhs); 216bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_code& lhs, const error_code& rhs); 217bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_code& lhs, const error_condition& rhs); 218bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_condition& lhs, const error_code& rhs); 219bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_condition& lhs, const error_condition& rhs); 220bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 221bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct hash<std::error_code>; 222bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 223bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} // std 224bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 225bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer*/ 226bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 2274e5885dc0f6aa0d5e095d79996955042d7b82b8dDylan Noblesmith#include "llvm/Config/llvm-config.h" 228bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#include "llvm/Support/type_traits.h" 229bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#include <cerrno> 230bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#include <string> 231bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 232fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// This must be here instead of a .inc file because it is used in the definition 233fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// of the enum values below. 23409203ac3dd5fe8a43a26aab589334ed7907afbf8Michael J. Spencer#ifdef LLVM_ON_WIN32 235b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer 236b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer // The following numbers were taken from VS2010. 237b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EAFNOSUPPORT 23844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EAFNOSUPPORT 102 239b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 240b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EADDRINUSE 24144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EADDRINUSE 100 242b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 243b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EADDRNOTAVAIL 24444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EADDRNOTAVAIL 101 245b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 246b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EISCONN 24744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EISCONN 113 248b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 249b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef E2BIG 25044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define E2BIG 7 251b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 252b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EDOM 25344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EDOM 33 254b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 255b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EFAULT 25644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EFAULT 14 257b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 258b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EBADF 25944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EBADF 9 260b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 261b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EBADMSG 262b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define EBADMSG 104 263b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 264b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPIPE 26544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EPIPE 32 266b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 267b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECONNABORTED 26844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ECONNABORTED 106 269b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 270b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EALREADY 27144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EALREADY 103 272b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 273b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECONNREFUSED 27444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ECONNREFUSED 107 275b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 276b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECONNRESET 27744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ECONNRESET 108 278b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 279b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EXDEV 28044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EXDEV 18 281b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 282b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EDESTADDRREQ 28344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EDESTADDRREQ 109 284b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 285b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EBUSY 28644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EBUSY 16 287b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 288b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTEMPTY 28944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOTEMPTY 41 290b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 291b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOEXEC 29244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOEXEC 8 293b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 294b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EEXIST 29544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EEXIST 17 296b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 297b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EFBIG 29844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EFBIG 27 299b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 300b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENAMETOOLONG 30144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENAMETOOLONG 38 302b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 303b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSYS 30444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOSYS 40 305b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 306b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EHOSTUNREACH 30744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EHOSTUNREACH 110 308b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 309b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EIDRM 310b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define EIDRM 111 311b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 312b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EILSEQ 31344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EILSEQ 42 314b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 315b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTTY 31644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOTTY 25 317b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 318b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EINTR 31944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EINTR 4 320b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 321b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EINVAL 32244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EINVAL 22 323b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 324b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ESPIPE 32544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ESPIPE 29 326b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 327b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EIO 32844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EIO 5 329b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 330b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EISDIR 33144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EISDIR 21 332b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 333b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EMSGSIZE 33444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EMSGSIZE 115 335b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 336b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENETDOWN 33744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENETDOWN 116 338b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 339b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENETRESET 34044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENETRESET 117 341b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 342b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENETUNREACH 34344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENETUNREACH 118 344b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 345b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOBUFS 34644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOBUFS 119 347b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 348b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECHILD 34944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ECHILD 10 350b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 351b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOLINK 352b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENOLINK 121 353b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 354b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOLCK 35544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOLCK 39 356b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 357b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENODATA 358b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENODATA 120 359b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 360b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOMSG 361b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENOMSG 122 362b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 363b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOPROTOOPT 36444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOPROTOOPT 123 365b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 366b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSPC 36744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOSPC 28 368b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 369b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSR 370b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENOSR 124 371b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 372b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENXIO 37344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENXIO 6 374b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 375b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENODEV 37644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENODEV 19 377b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 378b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOENT 37944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOENT 2 380b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 381b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ESRCH 38244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ESRCH 3 383b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 384b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTDIR 38544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOTDIR 20 386b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 387b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTSOCK 38844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOTSOCK 128 389b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 390b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSTR 391b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENOSTR 125 392b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 393b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTCONN 39444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOTCONN 126 395b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 396b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOMEM 39744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENOMEM 12 398b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 399b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTSUP 400b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENOTSUP 129 401b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 402b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECANCELED 403b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ECANCELED 105 404b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 405b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EINPROGRESS 40644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EINPROGRESS 112 407b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 408b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPERM 40944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EPERM 1 410b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 411b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EOPNOTSUPP 41244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EOPNOTSUPP 130 413b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 414b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EWOULDBLOCK 41544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EWOULDBLOCK 140 416b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 417b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EOWNERDEAD 418b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define EOWNERDEAD 133 419b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 420b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EACCES 42144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EACCES 13 422b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 423b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPROTO 424b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define EPROTO 134 425b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 426b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPROTONOSUPPORT 42744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EPROTONOSUPPORT 135 428b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 429b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EROFS 43044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EROFS 30 431b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 432b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EDEADLK 43344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EDEADLK 36 434b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 435b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EAGAIN 43644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EAGAIN 11 437b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 438b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ERANGE 43944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ERANGE 34 440b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 441b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTRECOVERABLE 442b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ENOTRECOVERABLE 127 443b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 444b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ETIME 445b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ETIME 137 446b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 447b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ETXTBSY 448b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define ETXTBSY 139 449b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 450b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ETIMEDOUT 45144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ETIMEDOUT 138 452b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 453b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENFILE 45444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ENFILE 23 455b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 456b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EMFILE 45744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EMFILE 24 458b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 459b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EMLINK 46044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EMLINK 31 461b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 462b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ELOOP 46344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define ELOOP 114 464b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 465b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EOVERFLOW 466b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# define EOVERFLOW 132 467b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 468b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPROTOTYPE 46944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer# define EPROTOTYPE 136 470b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif 47109203ac3dd5fe8a43a26aab589334ed7907afbf8Michael J. Spencer#endif 47209203ac3dd5fe8a43a26aab589334ed7907afbf8Michael J. Spencer 473bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencernamespace llvm { 474bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 475bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// is_error_code_enum 476bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 477bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class Tp> struct is_error_code_enum : public false_type {}; 478bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 479bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// is_error_condition_enum 480bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 481bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class Tp> struct is_error_condition_enum : public false_type {}; 482bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 483bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// Some error codes are not present on all platforms, so we provide equivalents 484bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// for them: 485bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 486bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//enum class errc 487bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerstruct errc { 488bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerenum _ { 489bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer success = 0, 490bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer address_family_not_supported = EAFNOSUPPORT, 491bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer address_in_use = EADDRINUSE, 492bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer address_not_available = EADDRNOTAVAIL, 493bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer already_connected = EISCONN, 494bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer argument_list_too_long = E2BIG, 495bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer argument_out_of_domain = EDOM, 496bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bad_address = EFAULT, 497bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bad_file_descriptor = EBADF, 498109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#ifdef EBADMSG 499bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bad_message = EBADMSG, 500109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#else 501109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer bad_message = EINVAL, 502109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#endif 503bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer broken_pipe = EPIPE, 504bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_aborted = ECONNABORTED, 505bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_already_in_progress = EALREADY, 506bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_refused = ECONNREFUSED, 507bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer connection_reset = ECONNRESET, 508bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer cross_device_link = EXDEV, 509bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer destination_address_required = EDESTADDRREQ, 510bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer device_or_resource_busy = EBUSY, 511bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer directory_not_empty = ENOTEMPTY, 512bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer executable_format_error = ENOEXEC, 513bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer file_exists = EEXIST, 514bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer file_too_large = EFBIG, 515bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer filename_too_long = ENAMETOOLONG, 516bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer function_not_supported = ENOSYS, 517bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer host_unreachable = EHOSTUNREACH, 518bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer identifier_removed = EIDRM, 519bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer illegal_byte_sequence = EILSEQ, 520bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer inappropriate_io_control_operation = ENOTTY, 521bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer interrupted = EINTR, 522bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer invalid_argument = EINVAL, 523bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer invalid_seek = ESPIPE, 524bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer io_error = EIO, 525bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer is_a_directory = EISDIR, 526bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer message_size = EMSGSIZE, 527bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer network_down = ENETDOWN, 528bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer network_reset = ENETRESET, 529bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer network_unreachable = ENETUNREACH, 530bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_buffer_space = ENOBUFS, 531bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_child_process = ECHILD, 532109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#ifdef ENOLINK 533bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_link = ENOLINK, 534109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#else 535109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer no_link = EINVAL, 536109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#endif 537bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_lock_available = ENOLCK, 538bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ENODATA 539bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_message_available = ENODATA, 540bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else 541bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_message_available = ENOMSG, 542bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif 543bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_message = ENOMSG, 544bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_protocol_option = ENOPROTOOPT, 545bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_space_on_device = ENOSPC, 546bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ENOSR 547bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_stream_resources = ENOSR, 548bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else 549bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_stream_resources = ENOMEM, 550bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif 551bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_device_or_address = ENXIO, 552bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_device = ENODEV, 553bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_file_or_directory = ENOENT, 554bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer no_such_process = ESRCH, 555bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_directory = ENOTDIR, 556bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_socket = ENOTSOCK, 557bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ENOSTR 558bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_stream = ENOSTR, 559bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else 560bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_a_stream = EINVAL, 561bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif 562bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_connected = ENOTCONN, 563bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_enough_memory = ENOMEM, 564bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer not_supported = ENOTSUP, 565bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi#ifdef ECANCELED 566bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_canceled = ECANCELED, 567bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi#else 568bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi operation_canceled = EINVAL, 569bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi#endif 570bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_in_progress = EINPROGRESS, 571bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_not_permitted = EPERM, 572bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_not_supported = EOPNOTSUPP, 573bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operation_would_block = EWOULDBLOCK, 574bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#ifdef EOWNERDEAD 575bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer owner_dead = EOWNERDEAD, 576bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#else 577bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer owner_dead = EINVAL, 578bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#endif 579bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer permission_denied = EACCES, 580109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#ifdef EPROTO 581bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer protocol_error = EPROTO, 582109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#else 583109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer protocol_error = EINVAL, 584109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#endif 585bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer protocol_not_supported = EPROTONOSUPPORT, 586bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer read_only_file_system = EROFS, 587bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer resource_deadlock_would_occur = EDEADLK, 588bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer resource_unavailable_try_again = EAGAIN, 589bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer result_out_of_range = ERANGE, 590bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#ifdef ENOTRECOVERABLE 591bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer state_not_recoverable = ENOTRECOVERABLE, 592bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#else 593bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer state_not_recoverable = EINVAL, 594bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#endif 595bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ETIME 596bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer stream_timeout = ETIME, 597bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else 598bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer stream_timeout = ETIMEDOUT, 599bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif 600bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer text_file_busy = ETXTBSY, 601bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer timed_out = ETIMEDOUT, 602bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_files_open_in_system = ENFILE, 603bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_files_open = EMFILE, 604bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_links = EMLINK, 605bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer too_many_symbolic_link_levels = ELOOP, 606bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer value_too_large = EOVERFLOW, 607bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer wrong_protocol_type = EPROTOTYPE 608bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 609bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 610bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _ v_; 611bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 612bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer errc(_ v) : v_(v) {} 613bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operator int() const {return v_;} 614bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 615bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 616bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_condition_enum<errc> : true_type { }; 617bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 618bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_condition_enum<errc::_> : true_type { }; 619bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 620bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_condition; 621bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_code; 622bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 623bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// class error_category 624bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 625bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass _do_message; 626bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 627bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_category 628bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 629bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 630bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual ~error_category(); 631bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 632bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerprivate: 633bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_category(); 634f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper error_category(const error_category&) LLVM_DELETED_FUNCTION; 635f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper error_category& operator=(const error_category&) LLVM_DELETED_FUNCTION; 636bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 637bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 638bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual const char* name() const = 0; 639bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual error_condition default_error_condition(int _ev) const; 640bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual bool equivalent(int _code, const error_condition& _condition) const; 641bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual bool equivalent(const error_code& _code, int _condition) const; 642bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer virtual std::string message(int _ev) const = 0; 643bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 644bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bool operator==(const error_category& _rhs) const {return this == &_rhs;} 645bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 646bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bool operator!=(const error_category& _rhs) const {return !(*this == _rhs);} 647bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 648bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer bool operator< (const error_category& _rhs) const {return this < &_rhs;} 649bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 650bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer friend class _do_message; 651bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 652bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 653bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass _do_message : public error_category 654bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 655bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 656a96a1824747632ce87ef065b4a13fb777d2b14d6Craig Topper virtual std::string message(int ev) const LLVM_OVERRIDE; 657bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 658bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 659bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& generic_category(); 660bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& system_category(); 661bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 662333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer/// Get the error_category used for errno values from POSIX functions. This is 663cbda61a468b4a2b33a54781d65023da7d9c8d291Michael J. Spencer/// the same as the system_category on POSIX systems, but is the same as the 664333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer/// generic_category on Windows. 665333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencerconst error_category& posix_category(); 666333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer 667bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_condition 668bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{ 669bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer int _val_; 670bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_category* _cat_; 671bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 672bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition() : _val_(0), _cat_(&generic_category()) {} 673bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 674bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition(int _val, const error_category& _cat) 675bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer : _val_(_val), _cat_(&_cat) {} 676bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 677bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class E> 678bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition(E _e, typename enable_if_c< 679bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer is_error_condition_enum<E>::value 680bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer >::type* = 0) 681bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer {*this = make_error_condition(_e);} 682bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 683bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void assign(int _val, const error_category& _cat) { 684bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _val_ = _val; 685bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _cat_ = &_cat; 686bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer } 687bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 688bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class E> 689bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer typename enable_if_c 690bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer < 691bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer is_error_condition_enum<E>::value, 692bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition& 693bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer >::type 694bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operator=(E _e) 695bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer {*this = make_error_condition(_e); return *this;} 696bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 697bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void clear() { 698bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _val_ = 0; 699bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _cat_ = &generic_category(); 700bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer } 701bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 702bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer int value() const {return _val_;} 703bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 704bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_category& category() const {return *_cat_;} 705bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer std::string message() const; 706bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 707da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer typedef void (*unspecified_bool_type)(); 708da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer static void unspecified_bool_true() {} 709da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer 710da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer operator unspecified_bool_type() const { // true if error 711da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer return _val_ == 0 ? 0 : unspecified_bool_true; 712da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer } 713bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 714bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 715bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline error_condition make_error_condition(errc _e) { 716bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return error_condition(static_cast<int>(_e), generic_category()); 717bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 718bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 719bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator<(const error_condition& _x, const error_condition& _y) { 720bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return _x.category() < _y.category() 721fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer || (_x.category() == _y.category() && _x.value() < _y.value()); 722bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 723bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 724bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// error_code 725bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 726bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_code { 727bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer int _val_; 728bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_category* _cat_; 729bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic: 730bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code() : _val_(0), _cat_(&system_category()) {} 731bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 73258604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie static error_code success() { 73358604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie return error_code(); 73458604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie } 73558604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie 736bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code(int _val, const error_category& _cat) 737bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer : _val_(_val), _cat_(&_cat) {} 738bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 739bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class E> 740bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code(E _e, typename enable_if_c< 741bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer is_error_code_enum<E>::value 742bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer >::type* = 0) { 743bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer *this = make_error_code(_e); 744bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer } 745bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 746bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void assign(int _val, const error_category& _cat) { 747bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _val_ = _val; 748bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _cat_ = &_cat; 749bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer } 750bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 751bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer template <class E> 752bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer typename enable_if_c 753bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer < 754bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer is_error_code_enum<E>::value, 755bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_code& 756bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer >::type 757bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operator=(E _e) 758bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer {*this = make_error_code(_e); return *this;} 759bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 760bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer void clear() { 761bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _val_ = 0; 762bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _cat_ = &system_category(); 763bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer } 764bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 765bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer int value() const {return _val_;} 766bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 767bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer const error_category& category() const {return *_cat_;} 768bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 769bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer error_condition default_error_condition() const 770bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer {return _cat_->default_error_condition(_val_);} 771bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 772bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer std::string message() const; 773bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 774da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer typedef void (*unspecified_bool_type)(); 775da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer static void unspecified_bool_true() {} 776da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer 777da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer operator unspecified_bool_type() const { // true if error 778da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer return _val_ == 0 ? 0 : unspecified_bool_true; 779da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer } 780bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 781bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 782bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline error_code make_error_code(errc _e) { 783bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return error_code(static_cast<int>(_e), generic_category()); 784bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 785bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 786bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator<(const error_code& _x, const error_code& _y) { 787bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return _x.category() < _y.category() 788fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer || (_x.category() == _y.category() && _x.value() < _y.value()); 789bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 790bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 791bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_code& _x, const error_code& _y) { 792bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return _x.category() == _y.category() && _x.value() == _y.value(); 793bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 794bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 795bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_code& _x, const error_condition& _y) { 796bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return _x.category().equivalent(_x.value(), _y) 797bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer || _y.category().equivalent(_x, _y.value()); 798bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 799bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 800bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_condition& _x, const error_code& _y) { 801bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return _y == _x; 802bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 803bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 804bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_condition& _x, const error_condition& _y) { 805bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return _x.category() == _y.category() && _x.value() == _y.value(); 806bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 807bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 808bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_code& _x, const error_code& _y) { 809bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return !(_x == _y); 810bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 811bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 812bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_code& _x, const error_condition& _y) { 813bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return !(_x == _y); 814bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 815bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 816bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_condition& _x, const error_code& _y) { 817bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return !(_x == _y); 818bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 819bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 820bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_condition& _x, const error_condition& _y) { 821bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return !(_x == _y); 822bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 823bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 82444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer// Windows errors. 825bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 826fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// To construct an error_code after an API error: 827bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// 828bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// error_code( ::GetLastError(), system_category() ) 829bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerstruct windows_error { 830bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerenum _ { 831bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer success = 0, 83244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer // These names and values are based on Windows WinError.h 83344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer // This is not a complete list. Add to this list if you need to explicitly 83444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer // check for it. 83544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer invalid_function = 1, // ERROR_INVALID_FUNCTION, 83644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer file_not_found = 2, // ERROR_FILE_NOT_FOUND, 83744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer path_not_found = 3, // ERROR_PATH_NOT_FOUND, 83844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer too_many_open_files = 4, // ERROR_TOO_MANY_OPEN_FILES, 83944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer access_denied = 5, // ERROR_ACCESS_DENIED, 84044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer invalid_handle = 6, // ERROR_INVALID_HANDLE, 84144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer arena_trashed = 7, // ERROR_ARENA_TRASHED, 84244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer not_enough_memory = 8, // ERROR_NOT_ENOUGH_MEMORY, 84344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer invalid_block = 9, // ERROR_INVALID_BLOCK, 84444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer bad_environment = 10, // ERROR_BAD_ENVIRONMENT, 84544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer bad_format = 11, // ERROR_BAD_FORMAT, 84644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer invalid_access = 12, // ERROR_INVALID_ACCESS, 84744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer outofmemory = 14, // ERROR_OUTOFMEMORY, 84844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer invalid_drive = 15, // ERROR_INVALID_DRIVE, 84944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer current_directory = 16, // ERROR_CURRENT_DIRECTORY, 85044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer not_same_device = 17, // ERROR_NOT_SAME_DEVICE, 85144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer no_more_files = 18, // ERROR_NO_MORE_FILES, 85244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer write_protect = 19, // ERROR_WRITE_PROTECT, 85344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer bad_unit = 20, // ERROR_BAD_UNIT, 85444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer not_ready = 21, // ERROR_NOT_READY, 85544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer bad_command = 22, // ERROR_BAD_COMMAND, 85644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer crc = 23, // ERROR_CRC, 85744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer bad_length = 24, // ERROR_BAD_LENGTH, 85844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer seek = 25, // ERROR_SEEK, 85944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer not_dos_disk = 26, // ERROR_NOT_DOS_DISK, 86044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer sector_not_found = 27, // ERROR_SECTOR_NOT_FOUND, 86144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer out_of_paper = 28, // ERROR_OUT_OF_PAPER, 86244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer write_fault = 29, // ERROR_WRITE_FAULT, 86344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer read_fault = 30, // ERROR_READ_FAULT, 86444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer gen_failure = 31, // ERROR_GEN_FAILURE, 86544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer sharing_violation = 32, // ERROR_SHARING_VIOLATION, 86644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer lock_violation = 33, // ERROR_LOCK_VIOLATION, 86744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer wrong_disk = 34, // ERROR_WRONG_DISK, 86844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer sharing_buffer_exceeded = 36, // ERROR_SHARING_BUFFER_EXCEEDED, 86944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer handle_eof = 38, // ERROR_HANDLE_EOF, 87044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer handle_disk_full = 39, // ERROR_HANDLE_DISK_FULL, 87144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer rem_not_list = 51, // ERROR_REM_NOT_LIST, 87244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer dup_name = 52, // ERROR_DUP_NAME, 87344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer bad_net_path = 53, // ERROR_BAD_NETPATH, 87444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer network_busy = 54, // ERROR_NETWORK_BUSY, 87544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer file_exists = 80, // ERROR_FILE_EXISTS, 87644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer cannot_make = 82, // ERROR_CANNOT_MAKE, 87744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer broken_pipe = 109, // ERROR_BROKEN_PIPE, 87844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer open_failed = 110, // ERROR_OPEN_FAILED, 87944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer buffer_overflow = 111, // ERROR_BUFFER_OVERFLOW, 88044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer disk_full = 112, // ERROR_DISK_FULL, 88144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer insufficient_buffer = 122, // ERROR_INSUFFICIENT_BUFFER, 88244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer lock_failed = 167, // ERROR_LOCK_FAILED, 88344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer busy = 170, // ERROR_BUSY, 88444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer cancel_violation = 173, // ERROR_CANCEL_VIOLATION, 88544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer already_exists = 183 // ERROR_ALREADY_EXISTS 886bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 887bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer _ v_; 888bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 889bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer windows_error(_ v) : v_(v) {} 89044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer explicit windows_error(int v) : v_(_(v)) {} 891bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer operator int() const {return v_;} 892bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}; 893bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 894bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 895bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_code_enum<windows_error> : true_type { }; 896bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 897bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_code_enum<windows_error::_> : true_type { }; 898bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 899bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline error_code make_error_code(windows_error e) { 900bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer return error_code(static_cast<int>(e), system_category()); 901bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} 902bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 903bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} // end namespace llvm 904bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer 905bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif 906