diff --git a/klee-examples/examples/foo.rs b/klee-examples/examples/foo.rs
index 83851e4253a333352f2c8badaea0918eac4151bd..af64ea310ffb160740b52981d29043f65a5c0369 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 bf97b30e724a282f14779e8577164be7b855cd76..f81e9e09ebd7a311765546bb55bba86b0a67a2dd 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
+    }
+}