mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
#ifndef GENMC_MIRI_INTERFACE_HPP
|
|
#define GENMC_MIRI_INTERFACE_HPP
|
|
|
|
#include "rust/cxx.h"
|
|
|
|
#include "config.h"
|
|
|
|
#include "Config/Config.hpp"
|
|
#include "Verification/GenMCDriver.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
/**** Types available to Miri ****/
|
|
|
|
// Config struct defined on the Rust side and translated to C++ by cxx.rs:
|
|
struct GenmcParams;
|
|
|
|
struct MiriGenMCShim : private GenMCDriver
|
|
{
|
|
|
|
public:
|
|
MiriGenMCShim(std::shared_ptr<const Config> conf, Mode mode /* = VerificationMode{} */)
|
|
: GenMCDriver(std::move(conf), nullptr, mode)
|
|
{
|
|
std::cerr << "C++: GenMC handle created!" << std::endl;
|
|
}
|
|
|
|
virtual ~MiriGenMCShim()
|
|
{
|
|
std::cerr << "C++: GenMC handle destroyed!" << std::endl;
|
|
}
|
|
|
|
static std::unique_ptr<MiriGenMCShim> createHandle(const GenmcParams &config);
|
|
};
|
|
|
|
/**** Functions available to Miri ****/
|
|
|
|
// NOTE: CXX doesn't support exposing static methods to Rust currently, so we expose this function instead.
|
|
static inline auto createGenmcHandle(const GenmcParams &config) -> std::unique_ptr<MiriGenMCShim>
|
|
{
|
|
return MiriGenMCShim::createHandle(config);
|
|
}
|
|
|
|
#endif /* GENMC_MIRI_INTERFACE_HPP */
|