Skip to content
Snippets Groups Projects
Select Git revision
  • f76bdc285d70e1fe674843a6e329ae7707fdaa49
  • master default protected
  • exam
  • exper
  • klee
  • simple
  • v0.3.2
  • v0.3.1
  • v0.3.0
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.1
  • v0.1.0
14 results

_8_full_syntax.rs

Blame
  • lib.rs 1.23 KiB
    #![no_std]
    
    use core::ffi::c_void;
    use cstr_core::c_char;
    
    #[doc(hidden)]
    pub use cstr_core::CStr;
    
    pub mod ll;
    
    // pub mod panic;
    
    #[inline(always)]
    pub fn klee_abort() -> ! {
        unsafe { ll::abort() };
    }
    
    #[inline(always)]
    pub fn klee_assume(cond: bool) {
        unsafe {
            ll::klee_assume(cond);
        }
    }
    
    #[inline(always)]
    pub fn klee_make_symbolic<T>(t: &mut T, name: &'static CStr) {
        unsafe {
            ll::klee_make_symbolic(
                t as *mut T as *mut c_void,
                core::mem::size_of::<T>(),
                name.as_ptr() as *const c_char,
            )
        }
    }
    
    #[macro_export]
    macro_rules! klee_abort {
        () => {
            unsafe { $crate::ll::abort() };
        };
    }
    
    #[macro_export]
    macro_rules! klee_assert {
        ($e:expr) => {{
            if !$e {
                unsafe { $crate::ll::abort() };
            }
        }};
    }
    
    #[macro_export]
    macro_rules! klee_assert_eq {
        ($e1:expr, $e2:expr ) => {{
            if !($e1 == $e2) {
                unsafe { $crate::ll::abort() };
            }
        }};
    }
    
    #[macro_export]
    macro_rules! klee_make_symbolic {
        (&mut $id:expr, $name:expr) => {
            $crate::klee_make_symbolic(unsafe { &mut $id }, unsafe {
                $crate::CStr::from_bytes_with_nul_unchecked(concat!($name, "\0").as_bytes())
            })
        };
    }