ROSE 0.11.145.147
FailureUnit.h
1#ifndef ROSE_BinaryAnalysis_ModelChecker_FailureUnit_H
2#define ROSE_BinaryAnalysis_ModelChecker_FailureUnit_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_MODEL_CHECKER
5
6#include <Rose/BinaryAnalysis/ModelChecker/ExecutionUnit.h>
7
8namespace Rose {
9namespace BinaryAnalysis {
10namespace ModelChecker {
11
15class FailureUnit: public ExecutionUnit {
16public:
17 using Ptr = FailureUnitPtr;
18
19private:
21 const std::string description_;
22 TagPtr tag_;
23
24protected:
25 FailureUnit() = delete;
26 FailureUnit(const Sawyer::Optional<rose_addr_t>&, const SourceLocation&, const std::string &description,
27 const TagPtr&);
28public:
29 ~FailureUnit();
30
31public:
42 static Ptr instance(const Sawyer::Optional<rose_addr_t>&, const SourceLocation&, const std::string &description);
43 static Ptr instance(const Sawyer::Optional<rose_addr_t>&, const SourceLocation&, const std::string &description, const TagPtr&);
46public:
53 const std::string& description() const;
54
55public:
56 virtual std::string printableName() const override;
57 virtual void printSteps(const SettingsPtr&, std::ostream&, const std::string &prefix,
58 size_t stepOrigin, size_t maxSteps) const override;
59 virtual void toYamlHeader(const SettingsPtr&, std::ostream&, const std::string &prefix) const override;
60 virtual void toYamlSteps(const SettingsPtr&, std::ostream&, const std::string &prefix,
61 size_t stepOrigin, size_t maxSteps) const override;
62 virtual std::vector<Sarif::LocationPtr> toSarif(size_t maxSteps) const override;
63 virtual size_t nSteps() const override;
64 virtual Sawyer::Optional<rose_addr_t> address() const override;
65
66 virtual std::vector<TagPtr>
67 execute(const SettingsPtr&, const SemanticCallbacksPtr&, const InstructionSemantics::BaseSemantics::RiscOperatorsPtr&) override;
68};
69
70} // namespace
71} // namespace
72} // namespace
73
74#endif
75#endif
Holds a value or nothing.
Definition Optional.h:56
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.
The ROSE library.