cases: add cases for runtime code in comptime scopes
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
export fn entry1() void {
|
||||
foo();
|
||||
}
|
||||
|
||||
comptime {
|
||||
qux();
|
||||
}
|
||||
|
||||
inline fn foo() void {
|
||||
_ = bar();
|
||||
}
|
||||
|
||||
fn bar() type {
|
||||
qux();
|
||||
return u8;
|
||||
}
|
||||
|
||||
fn qux() void {
|
||||
rt = 123;
|
||||
}
|
||||
|
||||
var rt: u32 = undefined;
|
||||
|
||||
// error
|
||||
//
|
||||
// :19:8: error: unable to evaluate comptime expression
|
||||
// :19:5: note: operation is runtime due to this operand
|
||||
// :14:8: note: called at comptime from here
|
||||
// :10:12: note: called at comptime from here
|
||||
// :13:10: note: function with comptime-only return type 'type' is evaluated at comptime
|
||||
// :13:10: note: types are not available at runtime
|
||||
// :2:8: note: called from here
|
||||
// :19:8: error: unable to evaluate comptime expression
|
||||
// :19:5: note: operation is runtime due to this operand
|
||||
// :6:8: note: called at comptime from here
|
||||
// :5:1: note: 'comptime' keyword forces comptime evaluation
|
||||
@@ -0,0 +1,61 @@
|
||||
var rt_val: [5]u32 = .{ 1, 2, 3, 4, 5 };
|
||||
|
||||
comptime {
|
||||
_ = rt_val; // fine
|
||||
}
|
||||
|
||||
comptime {
|
||||
const a = rt_val; // error
|
||||
_ = a;
|
||||
}
|
||||
|
||||
comptime {
|
||||
const l = rt_val.len; // fine
|
||||
@compileLog(l);
|
||||
}
|
||||
|
||||
export fn foo() void {
|
||||
_ = comptime rt_val; // error
|
||||
}
|
||||
|
||||
export fn bar() void {
|
||||
const l = comptime rt_val.len; // fine
|
||||
@compileLog(l);
|
||||
}
|
||||
|
||||
export fn baz() void {
|
||||
const S = struct {
|
||||
fn inner() void {
|
||||
_ = comptime rt_val;
|
||||
}
|
||||
};
|
||||
comptime S.inner(); // fine; inner comptime is a nop
|
||||
S.inner(); // error
|
||||
}
|
||||
|
||||
export fn qux() void {
|
||||
const S = struct {
|
||||
fn inner() void {
|
||||
const a = rt_val;
|
||||
_ = a;
|
||||
}
|
||||
};
|
||||
S.inner(); // fine; everything is runtime
|
||||
comptime S.inner(); // error
|
||||
}
|
||||
|
||||
// error
|
||||
//
|
||||
// :8:15: error: unable to resolve comptime value
|
||||
// :7:1: note: 'comptime' keyword forces comptime evaluation
|
||||
// :18:9: error: unable to resolve comptime value
|
||||
// :18:9: note: 'comptime' keyword forces comptime evaluation
|
||||
// :29:17: error: unable to resolve comptime value
|
||||
// :29:17: note: 'comptime' keyword forces comptime evaluation
|
||||
// :39:23: error: unable to resolve comptime value
|
||||
// :44:21: note: called at comptime from here
|
||||
// :44:5: note: 'comptime' keyword forces comptime evaluation
|
||||
//
|
||||
// Compile Log Output:
|
||||
// @as(usize, 5)
|
||||
// @as(usize, 5)
|
||||
Reference in New Issue
Block a user