/home/arjun/llvm-project/llvm/include/llvm/Support/Errc.h
Line | Count | Source (jump to first uncovered line) |
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 meas 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 patters 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 | 0 | inline std::error_code make_error_code(errc E) { |
79 | 0 | return std::error_code(static_cast<int>(E), std::generic_category()); |
80 | 0 | } |
81 | | } |
82 | | |
83 | | namespace std { |
84 | | template <> struct is_error_code_enum<llvm::errc> : std::true_type {}; |
85 | | } |
86 | | #endif |