mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-25 12:50:12 +01:00
There's a small update to update_checks.py to handle the recursive directories. Also, I'm only using one level of nesting in this PR but really no reason we can't do more. I'm just not sure what clustering is best right now. As a pattern, I'm trying to name all failing tests `fail_*.carbon`.
31 lines
1.1 KiB
Plaintext
31 lines
1.1 KiB
Plaintext
// 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
|
|
//
|
|
// RUN: not executable_semantics %s 2>&1 | \
|
|
// RUN: FileCheck --match-full-lines --allow-unused-prefixes=false %s
|
|
// RUN: not executable_semantics --trace %s 2>&1 | \
|
|
// RUN: FileCheck --match-full-lines --allow-unused-prefixes %s
|
|
// AUTOUPDATE: executable_semantics %s
|
|
// CHECK: RUNTIME ERROR: {{.*}}/executable_semantics/testdata/experimental_continuation/fail_lifetime.carbon:21: undefined behavior: access to dead value 1
|
|
|
|
package ExecutableSemanticsTest api;
|
|
|
|
// 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 x: i32 = 1;
|
|
__continuation k {
|
|
var y: i32 = x;
|
|
}
|
|
return k;
|
|
}
|
|
|
|
fn main() -> i32 {
|
|
var k: __Continuation = capture();
|
|
__run k; // error, lifetime of x is over
|
|
return 0;
|
|
}
|