improved checking for liveness when reading and writing memory (#448)

* improved checking for liveness when reading and writing memory

* moving some functions to be methods of State

* finished moving functions into State

* Update executable_semantics/interpreter/interpreter.h

Co-authored-by: Geoff Romer <gromer@google.com>

* moved some comments, other minor edits

Co-authored-by: Geoff Romer <gromer@google.com>
This commit is contained in:
Jeremy G. Siek
2021-04-21 14:10:42 -04:00
committed by GitHub
co-authored by Geoff Romer
parent 7e81fb9c62
commit 27fd9de5bf
8 changed files with 148 additions and 86 deletions
@@ -0,0 +1,21 @@
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// Test that the read from x triggers an error because x is dead.
// This test also demonstrates how by-reference free-variable capture
// is dangerous and can happen inside continuations.
fn capture() -> __Continuation {
var Int: x = 1;
__continuation k {
var Int: y = x;
}
return k;
}
fn main() -> Int {
var __Continuation: k = capture();
__run k; // error, lifetime of x is over
return 0;
}
@@ -0,0 +1,2 @@
12: undefined behavior: access to dead value 1
EXIT CODE: 255