mirror of
https://github.com/ziglang/zig.git
synced 2026-01-02 19:43:29 +00:00
stage2: don't call comptime functions with generic poison arguments
When calling a comptime or inline function, if the parameter is generic and is resolved to generic_poison or generic_poison_type, the invocation was part of another function's parameters or return type expression and is dependent on an as-of-yet type of another parameter. In this case, processing should stop, and we return error.GenericPoison to let the caller in funcCommon, zirParam or zirParamAnytype know that the function is generic.
This commit is contained in:
parent
c710d5eefe
commit
41e52bd5cc
16
src/Sema.zig
16
src/Sema.zig
@ -3888,6 +3888,14 @@ fn analyzeCall(
|
||||
|
||||
if (is_comptime_call) {
|
||||
const arg_val = try sema.resolveConstMaybeUndefVal(&child_block, arg_src, casted_arg);
|
||||
switch (arg_val.tag()) {
|
||||
.generic_poison, .generic_poison_type => {
|
||||
// This function is currently evaluated as part of an as-of-yet unresolvable
|
||||
// parameter or return type.
|
||||
return error.GenericPoison;
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
memoized_call_key.args[arg_i] = .{
|
||||
.ty = param_ty,
|
||||
.val = arg_val,
|
||||
@ -3905,6 +3913,14 @@ fn analyzeCall(
|
||||
if (is_comptime_call) {
|
||||
const arg_src = call_src; // TODO: better source location
|
||||
const arg_val = try sema.resolveConstMaybeUndefVal(&child_block, arg_src, uncasted_arg);
|
||||
switch (arg_val.tag()) {
|
||||
.generic_poison, .generic_poison_type => {
|
||||
// This function is currently evaluated as part of an as-of-yet unresolvable
|
||||
// parameter or return type.
|
||||
return error.GenericPoison;
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
memoized_call_key.args[arg_i] = .{
|
||||
.ty = sema.typeOf(uncasted_arg),
|
||||
.val = arg_val,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user