Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
ast: Add comptime reason for error set merge
Signed-off-by: Marek Maškarinec <marek@mrms.cz>
  • Loading branch information
marekmaskarinec committed Sep 28, 2025
commit d67e95db342f0638a728aaa39afffa24d2f6bbb9
2 changes: 2 additions & 0 deletions lib/std/zig.zig
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,7 @@ pub const SimpleComptimeReason = enum(u32) {
// Reasons other than `.type` are just more specific messages.
type,
array_sentinel,
merge_error_set,
pointer_sentinel,
slice_sentinel,
array_length,
Expand Down Expand Up @@ -843,6 +844,7 @@ pub const SimpleComptimeReason = enum(u32) {
.clobber => "clobber must be comptime-known",

.type => "types must be comptime-known",
.merge_error_set => "operand to error set merge (||) must be an error set",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
.merge_error_set => "operand to error set merge (||) must be an error set",
.merge_error_set => "operand to error set merge operator (||) must be a type",

although, really, it would probably be better to use the types must be comptime-known error message, with an additional note explaining why it expects a type.

.array_sentinel => "array sentinel value must be comptime-known",
.pointer_sentinel => "pointer sentinel value must be comptime-known",
.slice_sentinel => "slice sentinel value must be comptime-known",
Expand Down
4 changes: 2 additions & 2 deletions lib/std/zig/AstGen.zig
Original file line number Diff line number Diff line change
Expand Up @@ -793,8 +793,8 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE
else => unreachable,
};
const lhs_node, const rhs_node = tree.nodeData(node).node_and_node;
const lhs = try reachableTypeExpr(gz, scope, lhs_node, node);
const rhs = try reachableTypeExpr(gz, scope, rhs_node, node);
const lhs = try reachableExprComptime(gz, scope, coerced_type_ri, lhs_node, node, .merge_error_set);
const rhs = try reachableExprComptime(gz, scope, coerced_type_ri, rhs_node, node, .merge_error_set);
const result = try gz.addPlNode(inst_tag, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs });
return rvalue(gz, ri, result, node);
},
Expand Down