about summary refs log tree commit diff homepage
path: root/include/klee/Core/TerminationTypes.h
blob: 25e5ef4a5d0b92175ac521d967d78bad162dce3e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//===-- TerminationTypes.h --------------------------------------*- C++ -*-===//
//
//                     The KLEE Symbolic Virtual Machine
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef KLEE_TERMINATIONTYPES_H
#define KLEE_TERMINATIONTYPES_H

#include <cstdint>


#define TERMINATION_CLASSES                                                    \
  TCLASS(Exit, 1U)                                                             \
  TCLASS(Early, 2U)                                                            \
  TCLASS(SolverError, 3U)                                                      \
  TCLASS(ProgramError, 4U)                                                     \
  TCLASS(UserError, 5U)                                                        \
  TCLASS(ExecutionError, 6U)                                                   \
  TCLASS(EarlyAlgorithm, 7U)                                                   \
  TCLASS(EarlyUser, 8U)

///@brief Termination classes categorize termination types
enum class StateTerminationClass : std::uint8_t {
  /// \cond DO_NOT_DOCUMENT
  #define TCLASS(N,I) N = (I),
  TERMINATION_CLASSES
  /// \endcond
};


// (Name, ID, file suffix)
#define TERMINATION_TYPES                                                      \
  TTYPE(RUNNING, 0U, "")                                                       \
  TTYPE(Exit, 1U, "")                                                          \
  TTMARK(EXIT, 1U)                                                             \
  TTYPE(Interrupted, 10U, "early")                                             \
  TTYPE(MaxDepth, 11U, "early")                                                \
  TTYPE(OutOfMemory, 12U, "early")                                             \
  TTYPE(OutOfStackMemory, 13U, "early")                                        \
  TTMARK(EARLY, 13U)                                                           \
  TTYPE(Solver, 20U, "solver.err")                                             \
  TTMARK(SOLVERERR, 20U)                                                       \
  TTYPE(Abort, 30U, "abort.err")                                               \
  TTYPE(Assert, 31U, "assert.err")                                             \
  TTYPE(BadVectorAccess, 32U, "bad_vector_access.err")                         \
  TTYPE(Free, 33U, "free.err")                                                 \
  TTYPE(Model, 34U, "model.err")                                               \
  TTYPE(Overflow, 35U, "overflow.err")                                         \
  TTYPE(Ptr, 36U, "ptr.err")                                                   \
  TTYPE(ReadOnly, 37U, "read_only.err")                                        \
  TTYPE(ReportError, 38U, "report_error.err")                                  \
  TTYPE(InvalidBuiltin, 39U, "invalid_builtin_use.err")                        \
  TTYPE(ImplicitTruncation, 40U, "implicit_truncation.err")                    \
  TTYPE(ImplicitConversion, 41U, "implicit_conversion.err")                    \
  TTYPE(UnreachableCall, 42U, "unreachable_call.err")                          \
  TTYPE(MissingReturn, 43U, "missing_return.err")                              \
  TTYPE(InvalidLoad, 44U, "invalid_load.err")                                  \
  TTYPE(NullableAttribute, 45U, "nullable_attribute.err")                      \
  TTMARK(PROGERR, 45U)                                                         \
  TTYPE(User, 50U, "user.err")                                                 \
  TTMARK(USERERR, 50U)                                                         \
  TTYPE(Execution, 60U, "exec.err")                                            \
  TTYPE(External, 61U, "external.err")                                         \
  TTMARK(EXECERR, 61U)                                                         \
  TTYPE(Replay, 70U, "")                                                       \
  TTYPE(Merge, 71U, "")                                                        \
  TTMARK(EARLYALGORITHM, 71U)                                                  \
  TTYPE(SilentExit, 80U, "")                                                   \
  TTMARK(EARLYUSER, 80U)                                                       \
  TTMARK(END, 80U)


///@brief Reason an ExecutionState got terminated.
enum class StateTerminationType : std::uint8_t {
  /// \cond DO_NOT_DOCUMENT
  #define TTYPE(N,I,S) N = (I),
  #define TTMARK(N,I) N = (I),
  TERMINATION_TYPES
  /// \endcond
};


// reset definitions

#undef TCLASS
#undef TTYPE
#undef TTMARK
#define TCLASS(N,I)
#define TTYPE(N,I,S)
#define TTMARK(N,I)

#endif