CBMC
exception_utils.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Exception helper utilities
4 
5 Author: Fotis Koutoulakis, fotis.koutoulakis@diffblue.com
6 
7 \*******************************************************************/
8 
9 #ifndef CPROVER_UTIL_EXCEPTION_UTILS_H
10 #define CPROVER_UTIL_EXCEPTION_UTILS_H
11 
12 #include <string>
13 
14 #include "invariant.h"
15 #include "source_location.h"
16 
25 {
26 public:
30  virtual std::string what() const;
31  virtual ~cprover_exception_baset() = default;
32 
33 protected:
37  explicit cprover_exception_baset(std::string reason)
38  : reason(std::move(reason))
39  {
40  }
41 
44  std::string reason;
45 };
46 
51 {
54  std::string option;
56  std::string correct_input;
57 
58 public:
60  std::string reason,
61  std::string option,
62  std::string correct_input = "");
63 
64  std::string what() const override;
65 };
66 
72 {
73 public:
74  explicit system_exceptiont(std::string message);
75 };
76 
80 {
81 public:
82  explicit deserialization_exceptiont(std::string message);
83 };
84 
92 {
93 public:
94  explicit incorrect_goto_program_exceptiont(std::string message);
95 
96  template <typename Diagnostic, typename... Diagnostics>
98  std::string message,
99  Diagnostic &&diagnostic,
100  Diagnostics &&... diagnostics);
101 
102  template <typename... Diagnostics>
104  std::string message,
106  Diagnostics &&... diagnostics);
107 
108  std::string what() const override;
109 
110 private:
112 
113  std::string diagnostics;
114 };
115 
116 template <typename Diagnostic, typename... Diagnostics>
118  std::string message,
119  Diagnostic &&diagnostic,
120  Diagnostics &&... diagnostics)
121  : cprover_exception_baset(std::move(message)),
122  source_location(source_locationt::nil()),
123  diagnostics(detail::assemble_diagnostics(
124  std::forward<Diagnostic>(diagnostic),
125  std::forward<Diagnostics>(diagnostics)...))
126 {
127 }
128 
129 template <typename... Diagnostics>
131  std::string message,
132  source_locationt source_location,
133  Diagnostics &&... diagnostics)
134  : cprover_exception_baset(std::move(message)),
135  source_location(std::move(source_location)),
136  diagnostics(
137  detail::assemble_diagnostics(std::forward<Diagnostics>(diagnostics)...))
138 {
139 }
140 
145 {
146 public:
148  explicit unsupported_operation_exceptiont(std::string message);
149 };
150 
154 {
155 public:
156  explicit analysis_exceptiont(std::string reason);
157 };
158 
163 {
164 public:
165  explicit invalid_input_exceptiont(std::string reason);
166 };
167 
172 {
173 public:
175  std::string reason,
177  std::string what() const override;
178 
179  const std::string &get_reason() const
180  {
181  return reason;
182  }
183 
185  {
186  return source_location;
187  }
188 
189 private:
191 };
192 
193 #endif // CPROVER_UTIL_EXCEPTION_UTILS_H
Thrown when an unexpected error occurs during the analysis (e.g., when the SAT solver returns an erro...
analysis_exceptiont(std::string reason)
Base class for exceptions thrown in the cprover project.
Definition: c_errors.h:64
virtual std::string what() const
A human readable description of what went wrong.
virtual ~cprover_exception_baset()=default
cprover_exception_baset(std::string reason)
This constructor is marked protected to ensure this class isn't used directly.
std::string reason
The reason this exception was generated.
Definition: c_errors.h:83
Thrown when failing to deserialize a value from some low level format, like JSON or raw bytes.
deserialization_exceptiont(std::string message)
Thrown when a goto program that's being processed is in an invalid format, for example passing the wr...
incorrect_goto_program_exceptiont(std::string message)
std::string what() const override
A human readable description of what went wrong.
Thrown when users pass incorrect command line arguments, for example passing no files to analysis or ...
invalid_command_line_argument_exceptiont(std::string reason, std::string option, std::string correct_input="")
std::string what() const override
A human readable description of what went wrong.
std::string correct_input
In case we have samples of correct input to the option.
std::string option
The full command line option (not the argument) that got erroneous input.
Thrown when user-provided input cannot be processed.
invalid_input_exceptiont(std::string reason)
Thrown when we can't handle something in an input source file.
std::string what() const override
A human readable description of what went wrong.
const std::string & get_reason() const
const source_locationt & get_source_location() const
invalid_source_file_exceptiont(std::string reason, source_locationt source_location)
Thrown when some external system fails unexpectedly.
system_exceptiont(std::string message)
Thrown when we encounter an instruction, parameters to an instruction etc.
unsupported_operation_exceptiont(std::string message)
message is the unsupported operation causing this fault to occur.
std::string assemble_diagnostics()
Definition: invariant.h:342