| 1 | //===- llvm/Support/Errc.h - Defines the llvm::errc enum --------*- C++ -*-===// | 
| 2 | // | 
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
| 4 | // See https://llvm.org/LICENSE.txt for license information. | 
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
| 6 | // | 
| 7 | //===----------------------------------------------------------------------===// | 
| 8 | // | 
| 9 | // While std::error_code works OK on all platforms we use, there are some | 
| 10 | // some problems with std::errc that can be avoided by using our own | 
| 11 | // enumeration: | 
| 12 | // | 
| 13 | // * std::errc is a namespace in some implementations. That means that ADL | 
| 14 | //   doesn't work and it is sometimes necessary to write std::make_error_code | 
| 15 | //   or in templates: | 
| 16 | //   using std::make_error_code; | 
| 17 | //   make_error_code(...); | 
| 18 | // | 
| 19 | //   with this enum it is safe to always just use make_error_code. | 
| 20 | // | 
| 21 | // * Some implementations define fewer names than others. This header has | 
| 22 | //   the intersection of all the ones we support. | 
| 23 | // | 
| 24 | // * std::errc is just marked with is_error_condition_enum. This means that | 
| 25 | //   common patterns like AnErrorCode == errc::no_such_file_or_directory take | 
| 26 | //   4 virtual calls instead of two comparisons. | 
| 27 | //===----------------------------------------------------------------------===// | 
| 28 |  | 
| 29 | #ifndef LLVM_SUPPORT_ERRC_H | 
| 30 | #define LLVM_SUPPORT_ERRC_H | 
| 31 |  | 
| 32 | #include <system_error> | 
| 33 |  | 
| 34 | namespace llvm { | 
| 35 | enum class errc { | 
| 36 |   argument_list_too_long = int(std::errc::argument_list_too_long), | 
| 37 |   argument_out_of_domain = int(std::errc::argument_out_of_domain), | 
| 38 |   bad_address = int(std::errc::bad_address), | 
| 39 |   bad_file_descriptor = int(std::errc::bad_file_descriptor), | 
| 40 |   broken_pipe = int(std::errc::broken_pipe), | 
| 41 |   device_or_resource_busy = int(std::errc::device_or_resource_busy), | 
| 42 |   directory_not_empty = int(std::errc::directory_not_empty), | 
| 43 |   executable_format_error = int(std::errc::executable_format_error), | 
| 44 |   file_exists = int(std::errc::file_exists), | 
| 45 |   file_too_large = int(std::errc::file_too_large), | 
| 46 |   filename_too_long = int(std::errc::filename_too_long), | 
| 47 |   function_not_supported = int(std::errc::function_not_supported), | 
| 48 |   illegal_byte_sequence = int(std::errc::illegal_byte_sequence), | 
| 49 |   inappropriate_io_control_operation = | 
| 50 |       int(std::errc::inappropriate_io_control_operation), | 
| 51 |   interrupted = int(std::errc::interrupted), | 
| 52 |   invalid_argument = int(std::errc::invalid_argument), | 
| 53 |   invalid_seek = int(std::errc::invalid_seek), | 
| 54 |   io_error = int(std::errc::io_error), | 
| 55 |   is_a_directory = int(std::errc::is_a_directory), | 
| 56 |   no_child_process = int(std::errc::no_child_process), | 
| 57 |   no_lock_available = int(std::errc::no_lock_available), | 
| 58 |   no_space_on_device = int(std::errc::no_space_on_device), | 
| 59 |   no_such_device_or_address = int(std::errc::no_such_device_or_address), | 
| 60 |   no_such_device = int(std::errc::no_such_device), | 
| 61 |   no_such_file_or_directory = int(std::errc::no_such_file_or_directory), | 
| 62 |   no_such_process = int(std::errc::no_such_process), | 
| 63 |   not_a_directory = int(std::errc::not_a_directory), | 
| 64 |   not_enough_memory = int(std::errc::not_enough_memory), | 
| 65 |   not_supported = int(std::errc::not_supported), | 
| 66 |   operation_not_permitted = int(std::errc::operation_not_permitted), | 
| 67 |   permission_denied = int(std::errc::permission_denied), | 
| 68 |   read_only_file_system = int(std::errc::read_only_file_system), | 
| 69 |   resource_deadlock_would_occur = int(std::errc::resource_deadlock_would_occur), | 
| 70 |   resource_unavailable_try_again = | 
| 71 |       int(std::errc::resource_unavailable_try_again), | 
| 72 |   result_out_of_range = int(std::errc::result_out_of_range), | 
| 73 |   too_many_files_open_in_system = int(std::errc::too_many_files_open_in_system), | 
| 74 |   too_many_files_open = int(std::errc::too_many_files_open), | 
| 75 |   too_many_links = int(std::errc::too_many_links) | 
| 76 | }; | 
| 77 |  | 
| 78 | inline std::error_code make_error_code(errc E) { | 
| 79 |   return std::error_code(static_cast<int>(E), std::generic_category()); | 
| 80 | } | 
| 81 | } | 
| 82 |  | 
| 83 | namespace std { | 
| 84 | template <> struct is_error_code_enum<llvm::errc> : std::true_type {}; | 
| 85 | } | 
| 86 | #endif | 
| 87 |  |