From bfda421e45898de79c47f5de705c46eee4258486 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio <jorge@japaric.io> Date: Sun, 28 Jan 2018 14:18:01 +0100 Subject: [PATCH] add termination lang item --- klee-examples/examples/foo.rs | 2 +- klee/src/lang_items.rs | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/klee-examples/examples/foo.rs b/klee-examples/examples/foo.rs index 83851e4..af64ea3 100644 --- a/klee-examples/examples/foo.rs +++ b/klee-examples/examples/foo.rs @@ -6,7 +6,7 @@ extern crate klee; use core::ptr; fn main() { - let u = symbol!("u"); + let u = ksymbol!("u"); unsafe { ptr::read_volatile(&f2(f1(u))); diff --git a/klee/src/lang_items.rs b/klee/src/lang_items.rs index bf97b30..f81e9e0 100644 --- a/klee/src/lang_items.rs +++ b/klee/src/lang_items.rs @@ -4,8 +4,22 @@ unsafe extern "C" fn panic_fmt(_: ::core::fmt::Arguments, _: &'static str, _: u3 } #[lang = "start"] -extern "C" fn start(main: fn(), _argc: isize, _argv: *const *const u8) -> isize { +extern "C" fn start<T>(main: fn() -> T, _argc: isize, _argv: *const *const u8) -> isize + where + T: Termination, +{ main(); 0 } + +#[lang = "termination"] +pub trait Termination { + fn report(self) -> i32; +} + +impl Termination for () { + fn report(self) -> i32 { + 0 + } +} -- GitLab