authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-12-12 15:32:37+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-12-13 12:52:21+02:00
log7b2a936173165002105ba5e76bed69654e132fea
tree54a77e6d627b2cdec08b57d4402f35011fd064df
parent4832677c3bce61725c67306c4683921296abdff9

remove `stack` option from `@call`


16 files changed, 145 insertions(+), 211 deletions(-)

doc/langref.html.in+30-37
......@@ -4275,7 +4275,7 @@ test "using @typeInfo with runtime values" {
42754275}
42764276
42774277// Calls to `isFieldOptional` on `Struct1` get unrolled to an equivalent
4278// of this function:
4278// of this function:
42794279fn isFieldOptionalUnrolled(field_index: usize) !bool {
42804280 return switch (field_index) {
42814281 0 => false,
......@@ -7800,7 +7800,7 @@ comptime {
78007800 {#header_close#}
78017801
78027802 {#header_open|@call#}
7803 <pre>{#syntax#}@call(options: std.builtin.CallOptions, function: anytype, args: anytype) anytype{#endsyntax#}</pre>
7803 <pre>{#syntax#}@call(modifier: std.builtin.CallModifier, function: anytype, args: anytype) anytype{#endsyntax#}</pre>
78047804 <p>
78057805 Calls a function, in the same way that invoking an expression with parentheses does:
78067806 </p>
......@@ -7808,7 +7808,7 @@ comptime {
78087808const expect = @import("std").testing.expect;
78097809
78107810test "noinline function call" {
7811 try expect(@call(.{}, add, .{3, 9}) == 12);
7811 try expect(@call(.auto, add, .{3, 9}) == 12);
78127812}
78137813
78147814fn add(a: i32, b: i32) i32 {
......@@ -7817,48 +7817,41 @@ fn add(a: i32, b: i32) i32 {
78177817 {#code_end#}
78187818 <p>
78197819 {#syntax#}@call{#endsyntax#} allows more flexibility than normal function call syntax does. The
7820 {#syntax#}CallOptions{#endsyntax#} struct is reproduced here:
7820 {#syntax#}CallModifier{#endsyntax#} enum is reproduced here:
78217821 </p>
7822 {#syntax_block|zig|builtin.CallOptions struct#}
7823pub const CallOptions = struct {
7824 modifier: Modifier = .auto,
7825
7826 /// Only valid when `Modifier` is `Modifier.async_kw`.
7827 stack: ?[]align(std.Target.stack_align) u8 = null,
7828
7829 pub const Modifier = enum {
7830 /// Equivalent to function call syntax.
7831 auto,
7822 {#syntax_block|zig|builtin.CallModifier struct#}
7823pub const CallModifier = enum {
7824 /// Equivalent to function call syntax.
7825 auto,
78327826
7833 /// Equivalent to async keyword used with function call syntax.
7834 async_kw,
7827 /// Equivalent to async keyword used with function call syntax.
7828 async_kw,
78357829
7836 /// Prevents tail call optimization. This guarantees that the return
7837 /// address will point to the callsite, as opposed to the callsite's
7838 /// callsite. If the call is otherwise required to be tail-called
7839 /// or inlined, a compile error is emitted instead.
7840 never_tail,
7830 /// Prevents tail call optimization. This guarantees that the return
7831 /// address will point to the callsite, as opposed to the callsite's
7832 /// callsite. If the call is otherwise required to be tail-called
7833 /// or inlined, a compile error is emitted instead.
7834 never_tail,
78417835
7842 /// Guarantees that the call will not be inlined. If the call is
7843 /// otherwise required to be inlined, a compile error is emitted instead.
7844 never_inline,
7836 /// Guarantees that the call will not be inlined. If the call is
7837 /// otherwise required to be inlined, a compile error is emitted instead.
7838 never_inline,
78457839
7846 /// Asserts that the function call will not suspend. This allows a
7847 /// non-async function to call an async function.
7848 no_async,
7840 /// Asserts that the function call will not suspend. This allows a
7841 /// non-async function to call an async function.
7842 no_async,
78497843
7850 /// Guarantees that the call will be generated with tail call optimization.
7851 /// If this is not possible, a compile error is emitted instead.
7852 always_tail,
7844 /// Guarantees that the call will be generated with tail call optimization.
7845 /// If this is not possible, a compile error is emitted instead.
7846 always_tail,
78537847
7854 /// Guarantees that the call will inlined at the callsite.
7855 /// If this is not possible, a compile error is emitted instead.
7856 always_inline,
7848 /// Guarantees that the call will inlined at the callsite.
7849 /// If this is not possible, a compile error is emitted instead.
7850 always_inline,
78577851
7858 /// Evaluates the call at compile-time. If the call cannot be completed at
7859 /// compile-time, a compile error is emitted instead.
7860 compile_time,
7861 };
7852 /// Evaluates the call at compile-time. If the call cannot be completed at
7853 /// compile-time, a compile error is emitted instead.
7854 compile_time,
78627855};
78637856 {#end_syntax_block#}
78647857 {#header_close#}
lib/std/builtin.zig+32-39
......@@ -591,45 +591,38 @@ fn testVersionParse() !void {
591591
592592/// This data structure is used by the Zig language code generation and
593593/// therefore must be kept in sync with the compiler implementation.
594pub const CallOptions = struct {
595 modifier: Modifier = .auto,
596
597 /// Only valid when `Modifier` is `Modifier.async_kw`.
598 stack: ?[]align(std.Target.stack_align) u8 = null,
599
600 pub const Modifier = enum {
601 /// Equivalent to function call syntax.
602 auto,
603
604 /// Equivalent to async keyword used with function call syntax.
605 async_kw,
606
607 /// Prevents tail call optimization. This guarantees that the return
608 /// address will point to the callsite, as opposed to the callsite's
609 /// callsite. If the call is otherwise required to be tail-called
610 /// or inlined, a compile error is emitted instead.
611 never_tail,
612
613 /// Guarantees that the call will not be inlined. If the call is
614 /// otherwise required to be inlined, a compile error is emitted instead.
615 never_inline,
616
617 /// Asserts that the function call will not suspend. This allows a
618 /// non-async function to call an async function.
619 no_async,
620
621 /// Guarantees that the call will be generated with tail call optimization.
622 /// If this is not possible, a compile error is emitted instead.
623 always_tail,
624
625 /// Guarantees that the call will inlined at the callsite.
626 /// If this is not possible, a compile error is emitted instead.
627 always_inline,
628
629 /// Evaluates the call at compile-time. If the call cannot be completed at
630 /// compile-time, a compile error is emitted instead.
631 compile_time,
632 };
594pub const CallModifier = enum {
595 /// Equivalent to function call syntax.
596 auto,
597
598 /// Equivalent to async keyword used with function call syntax.
599 async_kw,
600
601 /// Prevents tail call optimization. This guarantees that the return
602 /// address will point to the callsite, as opposed to the callsite's
603 /// callsite. If the call is otherwise required to be tail-called
604 /// or inlined, a compile error is emitted instead.
605 never_tail,
606
607 /// Guarantees that the call will not be inlined. If the call is
608 /// otherwise required to be inlined, a compile error is emitted instead.
609 never_inline,
610
611 /// Asserts that the function call will not suspend. This allows a
612 /// non-async function to call an async function.
613 no_async,
614
615 /// Guarantees that the call will be generated with tail call optimization.
616 /// If this is not possible, a compile error is emitted instead.
617 always_tail,
618
619 /// Guarantees that the call will inlined at the callsite.
620 /// If this is not possible, a compile error is emitted instead.
621 always_inline,
622
623 /// Evaluates the call at compile-time. If the call cannot be completed at
624 /// compile-time, a compile error is emitted instead.
625 compile_time,
633626};
634627
635628/// This data structure is used by the Zig language code generation and
src/AstGen.zig+3-3
......@@ -8297,11 +8297,11 @@ fn builtinCall(
82978297 return rvalue(gz, ri, result, node);
82988298 },
82998299 .call => {
8300 const options = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .call_options_type } }, params[0]);
8300 const modifier = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .modifier_type } }, params[0]);
83018301 const callee = try calleeExpr(gz, scope, params[1]);
83028302 const args = try expr(gz, scope, .{ .rl = .none }, params[2]);
83038303 const result = try gz.addPlNode(.builtin_call, node, Zir.Inst.BuiltinCall{
8304 .options = options,
8304 .modifier = modifier,
83058305 .callee = callee,
83068306 .args = args,
83078307 .flags = .{
......@@ -8674,7 +8674,7 @@ fn callExpr(
86748674 const astgen = gz.astgen;
86758675
86768676 const callee = try calleeExpr(gz, scope, call.ast.fn_expr);
8677 const modifier: std.builtin.CallOptions.Modifier = blk: {
8677 const modifier: std.builtin.CallModifier = blk: {
86788678 if (gz.force_comptime) {
86798679 break :blk .compile_time;
86808680 }
src/Sema.zig+37-89
......@@ -5986,7 +5986,7 @@ fn zirCall(
59865986 const extra = sema.code.extraData(Zir.Inst.Call, inst_data.payload_index);
59875987 const args_len = extra.data.flags.args_len;
59885988
5989 const modifier = @intToEnum(std.builtin.CallOptions.Modifier, extra.data.flags.packed_modifier);
5989 const modifier = @intToEnum(std.builtin.CallModifier, extra.data.flags.packed_modifier);
59905990 const ensure_result_used = extra.data.flags.ensure_result_used;
59915991 const pop_error_return_trace = extra.data.flags.pop_error_return_trace;
59925992
......@@ -6222,7 +6222,7 @@ fn analyzeCall(
62226222 func: Air.Inst.Ref,
62236223 func_src: LazySrcLoc,
62246224 call_src: LazySrcLoc,
6225 modifier: std.builtin.CallOptions.Modifier,
6225 modifier: std.builtin.CallModifier,
62266226 ensure_result_used: bool,
62276227 uncasted_args: []const Air.Inst.Ref,
62286228 bound_arg_src: ?LazySrcLoc,
......@@ -20751,118 +20751,66 @@ fn zirMulAdd(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
2075120751 });
2075220752}
2075320753
20754fn resolveCallOptions(
20755 sema: *Sema,
20756 block: *Block,
20757 src: LazySrcLoc,
20758 zir_ref: Zir.Inst.Ref,
20759 is_comptime: bool,
20760 is_nosuspend: bool,
20761 func: Air.Inst.Ref,
20762 func_src: LazySrcLoc,
20763) CompileError!std.builtin.CallOptions.Modifier {
20764 const call_options_ty = try sema.getBuiltinType("CallOptions");
20765 const air_ref = try sema.resolveInst(zir_ref);
20766 const options = try sema.coerce(block, call_options_ty, air_ref, src);
20767
20768 const modifier_src = sema.maybeOptionsSrc(block, src, "modifier");
20769 const stack_src = sema.maybeOptionsSrc(block, src, "stack");
20770
20771 const modifier = try sema.fieldVal(block, src, options, "modifier", modifier_src);
20772 const modifier_val = try sema.resolveConstValue(block, modifier_src, modifier, "call modifier must be comptime-known");
20773 const wanted_modifier = modifier_val.toEnum(std.builtin.CallOptions.Modifier);
20754fn zirBuiltinCall(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
20755 const tracy = trace(@src());
20756 defer tracy.end();
2077420757
20775 const stack = try sema.fieldVal(block, src, options, "stack", stack_src);
20776 const stack_val = try sema.resolveConstValue(block, stack_src, stack, "call stack value must be comptime-known");
20758 const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
20759 const modifier_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node };
20760 const func_src: LazySrcLoc = .{ .node_offset_builtin_call_arg1 = inst_data.src_node };
20761 const args_src: LazySrcLoc = .{ .node_offset_builtin_call_arg2 = inst_data.src_node };
20762 const call_src = inst_data.src();
2077720763
20778 if (!stack_val.isNull()) {
20779 return sema.fail(block, stack_src, "TODO: implement @call with stack", .{});
20780 }
20764 const extra = sema.code.extraData(Zir.Inst.BuiltinCall, inst_data.payload_index).data;
20765 var func = try sema.resolveInst(extra.callee);
2078120766
20782 switch (wanted_modifier) {
20767 const modifier_ty = try sema.getBuiltinType("CallModifier");
20768 const air_ref = try sema.resolveInst(extra.modifier);
20769 const modifier_ref = try sema.coerce(block, modifier_ty, air_ref, modifier_src);
20770 const modifier_val = try sema.resolveConstValue(block, modifier_src, modifier_ref, "call modifier must be comptime-known");
20771 var modifier = modifier_val.toEnum(std.builtin.CallModifier);
20772 switch (modifier) {
2078320773 // These can be upgraded to comptime or nosuspend calls.
2078420774 .auto, .never_tail, .no_async => {
20785 if (is_comptime) {
20786 if (wanted_modifier == .never_tail) {
20775 if (extra.flags.is_comptime) {
20776 if (modifier == .never_tail) {
2078720777 return sema.fail(block, modifier_src, "unable to perform 'never_tail' call at compile-time", .{});
2078820778 }
20789 return .compile_time;
20790 }
20791 if (is_nosuspend) {
20792 return .no_async;
20779 modifier = .compile_time;
20780 } else if (extra.flags.is_nosuspend) {
20781 modifier = .no_async;
2079320782 }
20794 return wanted_modifier;
2079520783 },
2079620784 // These can be upgraded to comptime. nosuspend bit can be safely ignored.
2079720785 .always_inline, .compile_time => {
2079820786 _ = (try sema.resolveDefinedValue(block, func_src, func)) orelse {
20799 return sema.fail(block, func_src, "modifier '{s}' requires a comptime-known function", .{@tagName(wanted_modifier)});
20787 return sema.fail(block, func_src, "modifier '{s}' requires a comptime-known function", .{@tagName(modifier)});
2080020788 };
2080120789
20802 if (is_comptime) {
20803 return .compile_time;
20790 if (extra.flags.is_comptime) {
20791 modifier = .compile_time;
2080420792 }
20805 return wanted_modifier;
2080620793 },
2080720794 .always_tail => {
20808 if (is_comptime) {
20809 return .compile_time;
20795 if (extra.flags.is_comptime) {
20796 modifier = .compile_time;
2081020797 }
20811 return wanted_modifier;
2081220798 },
2081320799 .async_kw => {
20814 if (is_nosuspend) {
20800 if (extra.flags.is_nosuspend) {
2081520801 return sema.fail(block, modifier_src, "modifier 'async_kw' cannot be used inside nosuspend block", .{});
2081620802 }
20817 if (is_comptime) {
20803 if (extra.flags.is_comptime) {
2081820804 return sema.fail(block, modifier_src, "modifier 'async_kw' cannot be used in combination with comptime function call", .{});
2081920805 }
20820 return wanted_modifier;
2082120806 },
2082220807 .never_inline => {
20823 if (is_comptime) {
20808 if (extra.flags.is_comptime) {
2082420809 return sema.fail(block, modifier_src, "unable to perform 'never_inline' call at compile-time", .{});
2082520810 }
20826 return wanted_modifier;
2082720811 },
2082820812 }
20829}
20830
20831fn zirBuiltinCall(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
20832 const tracy = trace(@src());
20833 defer tracy.end();
2083420813
20835 const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
20836 const options_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node };
20837 const func_src: LazySrcLoc = .{ .node_offset_builtin_call_arg1 = inst_data.src_node };
20838 const args_src: LazySrcLoc = .{ .node_offset_builtin_call_arg2 = inst_data.src_node };
20839 const call_src = inst_data.src();
20840
20841 const extra = sema.code.extraData(Zir.Inst.BuiltinCall, inst_data.payload_index).data;
20842 var func = try sema.resolveInst(extra.callee);
20843 const modifier = sema.resolveCallOptions(
20844 block,
20845 .unneeded,
20846 extra.options,
20847 extra.flags.is_comptime,
20848 extra.flags.is_nosuspend,
20849 func,
20850 func_src,
20851 ) catch |err| switch (err) {
20852 error.NeededSourceLocation => {
20853 _ = try sema.resolveCallOptions(
20854 block,
20855 options_src,
20856 extra.options,
20857 extra.flags.is_comptime,
20858 extra.flags.is_nosuspend,
20859 func,
20860 func_src,
20861 );
20862 return error.AnalysisFail;
20863 },
20864 else => |e| return e,
20865 };
2086620814 const args = try sema.resolveInst(extra.args);
2086720815
2086820816 const args_ty = sema.typeOf(args);
......@@ -29558,7 +29506,7 @@ pub fn resolveTypeRequiresComptime(sema: *Sema, ty: Type) CompileError!bool {
2955829506 .address_space,
2955929507 .float_mode,
2956029508 .reduce_op,
29561 .call_options,
29509 .modifier,
2956229510 .prefetch_options,
2956329511 .export_options,
2956429512 .extern_options,
......@@ -29823,7 +29771,7 @@ pub fn resolveTypeFields(sema: *Sema, ty: Type) CompileError!Type {
2982329771 .address_space => return sema.getBuiltinType("AddressSpace"),
2982429772 .float_mode => return sema.getBuiltinType("FloatMode"),
2982529773 .reduce_op => return sema.getBuiltinType("ReduceOp"),
29826 .call_options => return sema.getBuiltinType("CallOptions"),
29774 .modifier => return sema.getBuiltinType("CallModifier"),
2982729775 .prefetch_options => return sema.getBuiltinType("PrefetchOptions"),
2982829776
2982929777 else => return ty,
......@@ -30841,7 +30789,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
3084130789 .address_space,
3084230790 .float_mode,
3084330791 .reduce_op,
30844 .call_options,
30792 .modifier,
3084530793 .prefetch_options,
3084630794 .export_options,
3084730795 .extern_options,
......@@ -31164,7 +31112,7 @@ pub fn addType(sema: *Sema, ty: Type) !Air.Inst.Ref {
3116431112 .address_space => return .address_space_type,
3116531113 .float_mode => return .float_mode_type,
3116631114 .reduce_op => return .reduce_op_type,
31167 .call_options => return .call_options_type,
31115 .modifier => return .modifier_type,
3116831116 .prefetch_options => return .prefetch_options_type,
3116931117 .export_options => return .export_options_type,
3117031118 .extern_options => return .extern_options_type,
......@@ -31557,7 +31505,7 @@ pub fn typeRequiresComptime(sema: *Sema, ty: Type) CompileError!bool {
3155731505 .address_space,
3155831506 .float_mode,
3155931507 .reduce_op,
31560 .call_options,
31508 .modifier,
3156131509 .prefetch_options,
3156231510 .export_options,
3156331511 .extern_options,
......@@ -32387,7 +32335,7 @@ fn enumHasInt(
3238732335 .address_space,
3238832336 .float_mode,
3238932337 .reduce_op,
32390 .call_options,
32338 .modifier,
3239132339 .prefetch_options,
3239232340 .export_options,
3239332341 .extern_options,
src/TypedValue.zig+1-1
......@@ -136,7 +136,7 @@ pub fn print(
136136 .address_space_type => return writer.writeAll("std.builtin.AddressSpace"),
137137 .float_mode_type => return writer.writeAll("std.builtin.FloatMode"),
138138 .reduce_op_type => return writer.writeAll("std.builtin.ReduceOp"),
139 .call_options_type => return writer.writeAll("std.builtin.CallOptions"),
139 .modifier_type => return writer.writeAll("std.builtin.CallModifier"),
140140 .prefetch_options_type => return writer.writeAll("std.builtin.PrefetchOptions"),
141141 .export_options_type => return writer.writeAll("std.builtin.ExportOptions"),
142142 .extern_options_type => return writer.writeAll("std.builtin.ExternOptions"),
src/Zir.zig+6-6
......@@ -2070,7 +2070,7 @@ pub const Inst = struct {
20702070 address_space_type,
20712071 float_mode_type,
20722072 reduce_op_type,
2073 call_options_type,
2073 modifier_type,
20742074 prefetch_options_type,
20752075 export_options_type,
20762076 extern_options_type,
......@@ -2345,9 +2345,9 @@ pub const Inst = struct {
23452345 .ty = Type.initTag(.type),
23462346 .val = Value.initTag(.reduce_op_type),
23472347 },
2348 .call_options_type = .{
2348 .modifier_type = .{
23492349 .ty = Type.initTag(.type),
2350 .val = Value.initTag(.call_options_type),
2350 .val = Value.initTag(.modifier_type),
23512351 },
23522352 .prefetch_options_type = .{
23532353 .ty = Type.initTag(.type),
......@@ -2832,7 +2832,7 @@ pub const Inst = struct {
28322832 callee: Ref,
28332833
28342834 pub const Flags = packed struct {
2835 /// std.builtin.CallOptions.Modifier in packed form
2835 /// std.builtin.CallModifier in packed form
28362836 pub const PackedModifier = u3;
28372837 pub const PackedArgsLen = u27;
28382838
......@@ -2844,7 +2844,7 @@ pub const Inst = struct {
28442844 comptime {
28452845 if (@sizeOf(Flags) != 4 or @bitSizeOf(Flags) != 32)
28462846 @compileError("Layout of Call.Flags needs to be updated!");
2847 if (@bitSizeOf(std.builtin.CallOptions.Modifier) != @bitSizeOf(PackedModifier))
2847 if (@bitSizeOf(std.builtin.CallModifier) != @bitSizeOf(PackedModifier))
28482848 @compileError("Call.Flags.PackedModifier needs to be updated!");
28492849 }
28502850 };
......@@ -2860,7 +2860,7 @@ pub const Inst = struct {
28602860 // Note: Flags *must* come first so that unusedResultExpr
28612861 // can find it when it goes to modify them.
28622862 flags: Flags,
2863 options: Ref,
2863 modifier: Ref,
28642864 callee: Ref,
28652865 args: Ref,
28662866
src/arch/aarch64/CodeGen.zig+1-1
......@@ -4110,7 +4110,7 @@ fn airFence(self: *Self) !void {
41104110 //return self.finishAirBookkeeping();
41114111}
41124112
4113fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.Modifier) !void {
4113fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier) !void {
41144114 if (modifier == .always_tail) return self.fail("TODO implement tail calls for aarch64", .{});
41154115 const pl_op = self.air.instructions.items(.data)[inst].pl_op;
41164116 const callee = pl_op.operand;
src/arch/arm/CodeGen.zig+1-1
......@@ -4097,7 +4097,7 @@ fn airFence(self: *Self) !void {
40974097 //return self.finishAirBookkeeping();
40984098}
40994099
4100fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.Modifier) !void {
4100fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier) !void {
41014101 if (modifier == .always_tail) return self.fail("TODO implement tail calls for arm", .{});
41024102 const pl_op = self.air.instructions.items(.data)[inst].pl_op;
41034103 const callee = pl_op.operand;
src/arch/riscv64/CodeGen.zig+1-1
......@@ -1672,7 +1672,7 @@ fn airFence(self: *Self) !void {
16721672 //return self.finishAirBookkeeping();
16731673}
16741674
1675fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.Modifier) !void {
1675fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier) !void {
16761676 if (modifier == .always_tail) return self.fail("TODO implement tail calls for riscv64", .{});
16771677 const pl_op = self.air.instructions.items(.data)[inst].pl_op;
16781678 const fn_ty = self.air.typeOf(pl_op.operand);
src/arch/sparc64/CodeGen.zig+1-1
......@@ -1155,7 +1155,7 @@ fn airBreakpoint(self: *Self) !void {
11551155 return self.finishAirBookkeeping();
11561156}
11571157
1158fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.Modifier) !void {
1158fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier) !void {
11591159 if (modifier == .always_tail) return self.fail("TODO implement tail calls for {}", .{self.target.cpu.arch});
11601160
11611161 const pl_op = self.air.instructions.items(.data)[inst].pl_op;
src/arch/wasm/CodeGen.zig+1-1
......@@ -2003,7 +2003,7 @@ fn airRetLoad(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
20032003 return func.finishAir(inst, .none, &.{un_op});
20042004}
20052005
2006fn airCall(func: *CodeGen, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.Modifier) InnerError!void {
2006fn airCall(func: *CodeGen, inst: Air.Inst.Index, modifier: std.builtin.CallModifier) InnerError!void {
20072007 if (modifier == .always_tail) return func.fail("TODO implement tail calls for wasm", .{});
20082008 const pl_op = func.air.instructions.items(.data)[inst].pl_op;
20092009 const extra = func.air.extraData(Air.Call, pl_op.payload);
src/arch/x86_64/CodeGen.zig+1-1
......@@ -3899,7 +3899,7 @@ fn airFence(self: *Self) !void {
38993899 //return self.finishAirBookkeeping();
39003900}
39013901
3902fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.Modifier) !void {
3902fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier) !void {
39033903 if (modifier == .always_tail) return self.fail("TODO implement tail calls for x86_64", .{});
39043904 const pl_op = self.air.instructions.items(.data)[inst].pl_op;
39053905 const callee = pl_op.operand;
src/codegen/c.zig+1-1
......@@ -3874,7 +3874,7 @@ fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {
38743874fn airCall(
38753875 f: *Function,
38763876 inst: Air.Inst.Index,
3877 modifier: std.builtin.CallOptions.Modifier,
3877 modifier: std.builtin.CallModifier,
38783878) !CValue {
38793879 // Not even allowed to call panic in a naked function.
38803880 if (f.object.dg.decl.ty.fnCallingConvention() == .Naked) return .none;
src/print_zir.zig+2-2
......@@ -801,7 +801,7 @@ const Writer = struct {
801801 try self.writeFlag(stream, "nosuspend ", extra.flags.is_nosuspend);
802802 try self.writeFlag(stream, "comptime ", extra.flags.is_comptime);
803803
804 try self.writeInstRef(stream, extra.options);
804 try self.writeInstRef(stream, extra.modifier);
805805 try stream.writeAll(", ");
806806 try self.writeInstRef(stream, extra.callee);
807807 try stream.writeAll(", ");
......@@ -1170,7 +1170,7 @@ const Writer = struct {
11701170 if (extra.data.flags.ensure_result_used) {
11711171 try stream.writeAll("nodiscard ");
11721172 }
1173 try stream.print(".{s}, ", .{@tagName(@intToEnum(std.builtin.CallOptions.Modifier, extra.data.flags.packed_modifier))});
1173 try stream.print(".{s}, ", .{@tagName(@intToEnum(std.builtin.CallModifier, extra.data.flags.packed_modifier))});
11741174 try self.writeInstRef(stream, extra.data.callee);
11751175 try stream.writeAll(", [");
11761176
src/type.zig+22-22
......@@ -129,7 +129,6 @@ pub const Type = extern union {
129129 .empty_struct,
130130 .empty_struct_literal,
131131 .@"struct",
132 .call_options,
133132 .prefetch_options,
134133 .export_options,
135134 .extern_options,
......@@ -147,6 +146,7 @@ pub const Type = extern union {
147146 .address_space,
148147 .float_mode,
149148 .reduce_op,
149 .modifier,
150150 => return .Enum,
151151
152152 .@"union",
......@@ -885,7 +885,6 @@ pub const Type = extern union {
885885
886886 // we can't compare these based on tags because it wouldn't detect if,
887887 // for example, a was resolved into .@"struct" but b was one of these tags.
888 .call_options,
889888 .prefetch_options,
890889 .export_options,
891890 .extern_options,
......@@ -914,6 +913,7 @@ pub const Type = extern union {
914913 .address_space,
915914 .float_mode,
916915 .reduce_op,
916 .modifier,
917917 => unreachable, // needed to resolve the type before now
918918
919919 .@"union", .union_safety_tagged, .union_tagged => {
......@@ -1194,7 +1194,6 @@ pub const Type = extern union {
11941194 },
11951195
11961196 // we can't hash these based on tags because they wouldn't match the expanded version.
1197 .call_options,
11981197 .prefetch_options,
11991198 .export_options,
12001199 .extern_options,
......@@ -1222,6 +1221,7 @@ pub const Type = extern union {
12221221 .address_space,
12231222 .float_mode,
12241223 .reduce_op,
1224 .modifier,
12251225 => unreachable, // needed to resolve the type before now
12261226
12271227 .@"union", .union_safety_tagged, .union_tagged => {
......@@ -1333,7 +1333,7 @@ pub const Type = extern union {
13331333 .address_space,
13341334 .float_mode,
13351335 .reduce_op,
1336 .call_options,
1336 .modifier,
13371337 .prefetch_options,
13381338 .export_options,
13391339 .extern_options,
......@@ -1665,7 +1665,7 @@ pub const Type = extern union {
16651665 .address_space => return writer.writeAll("std.builtin.AddressSpace"),
16661666 .float_mode => return writer.writeAll("std.builtin.FloatMode"),
16671667 .reduce_op => return writer.writeAll("std.builtin.ReduceOp"),
1668 .call_options => return writer.writeAll("std.builtin.CallOptions"),
1668 .modifier => return writer.writeAll("std.builtin.CallModifier"),
16691669 .prefetch_options => return writer.writeAll("std.builtin.PrefetchOptions"),
16701670 .export_options => return writer.writeAll("std.builtin.ExportOptions"),
16711671 .extern_options => return writer.writeAll("std.builtin.ExternOptions"),
......@@ -1943,7 +1943,7 @@ pub const Type = extern union {
19431943 .address_space => unreachable,
19441944 .float_mode => unreachable,
19451945 .reduce_op => unreachable,
1946 .call_options => unreachable,
1946 .modifier => unreachable,
19471947 .prefetch_options => unreachable,
19481948 .export_options => unreachable,
19491949 .extern_options => unreachable,
......@@ -2311,7 +2311,7 @@ pub const Type = extern union {
23112311 .address_space => return Value.initTag(.address_space_type),
23122312 .float_mode => return Value.initTag(.float_mode_type),
23132313 .reduce_op => return Value.initTag(.reduce_op_type),
2314 .call_options => return Value.initTag(.call_options_type),
2314 .modifier => return Value.initTag(.modifier_type),
23152315 .prefetch_options => return Value.initTag(.prefetch_options_type),
23162316 .export_options => return Value.initTag(.export_options_type),
23172317 .extern_options => return Value.initTag(.extern_options_type),
......@@ -2385,7 +2385,7 @@ pub const Type = extern union {
23852385 .address_space,
23862386 .float_mode,
23872387 .reduce_op,
2388 .call_options,
2388 .modifier,
23892389 .prefetch_options,
23902390 .export_options,
23912391 .extern_options,
......@@ -2631,7 +2631,7 @@ pub const Type = extern union {
26312631 .address_space,
26322632 .float_mode,
26332633 .reduce_op,
2634 .call_options,
2634 .modifier,
26352635 .prefetch_options,
26362636 .export_options,
26372637 .extern_options,
......@@ -2873,7 +2873,7 @@ pub const Type = extern union {
28732873 .address_space,
28742874 .float_mode,
28752875 .reduce_op,
2876 .call_options,
2876 .modifier,
28772877 .prefetch_options,
28782878 .export_options,
28792879 .extern_options,
......@@ -3257,7 +3257,7 @@ pub const Type = extern union {
32573257 .inferred_alloc_mut => unreachable,
32583258 .var_args_param => unreachable,
32593259 .generic_poison => unreachable,
3260 .call_options => unreachable, // missing call to resolveTypeFields
3260 .modifier => unreachable, // missing call to resolveTypeFields
32613261 .prefetch_options => unreachable, // missing call to resolveTypeFields
32623262 .export_options => unreachable, // missing call to resolveTypeFields
32633263 .extern_options => unreachable, // missing call to resolveTypeFields
......@@ -3753,7 +3753,7 @@ pub const Type = extern union {
37533753 .address_space,
37543754 .float_mode,
37553755 .reduce_op,
3756 .call_options,
3756 .modifier,
37573757 .prefetch_options,
37583758 .export_options,
37593759 .extern_options,
......@@ -4279,7 +4279,7 @@ pub const Type = extern union {
42794279 .address_space,
42804280 .float_mode,
42814281 .reduce_op,
4282 .call_options,
4282 .modifier,
42834283 .prefetch_options,
42844284 .export_options,
42854285 .extern_options,
......@@ -4306,7 +4306,7 @@ pub const Type = extern union {
43064306 .address_space,
43074307 .float_mode,
43084308 .reduce_op,
4309 .call_options,
4309 .modifier,
43104310 .prefetch_options,
43114311 .export_options,
43124312 .extern_options,
......@@ -4990,7 +4990,7 @@ pub const Type = extern union {
49904990 .address_space,
49914991 .float_mode,
49924992 .reduce_op,
4993 .call_options,
4993 .modifier,
49944994 .prefetch_options,
49954995 .export_options,
49964996 .extern_options,
......@@ -5165,7 +5165,7 @@ pub const Type = extern union {
51655165 .address_space,
51665166 .float_mode,
51675167 .reduce_op,
5168 .call_options,
5168 .modifier,
51695169 .prefetch_options,
51705170 .export_options,
51715171 .extern_options,
......@@ -5483,7 +5483,7 @@ pub const Type = extern union {
54835483 .address_space,
54845484 .float_mode,
54855485 .reduce_op,
5486 .call_options,
5486 .modifier,
54875487 .prefetch_options,
54885488 .export_options,
54895489 .extern_options,
......@@ -5565,7 +5565,7 @@ pub const Type = extern union {
55655565 .address_space,
55665566 .float_mode,
55675567 .reduce_op,
5568 .call_options,
5568 .modifier,
55695569 .prefetch_options,
55705570 .export_options,
55715571 .extern_options,
......@@ -5878,7 +5878,7 @@ pub const Type = extern union {
58785878 .address_space,
58795879 .float_mode,
58805880 .reduce_op,
5881 .call_options,
5881 .modifier,
58825882 .prefetch_options,
58835883 .export_options,
58845884 .extern_options,
......@@ -5926,7 +5926,7 @@ pub const Type = extern union {
59265926 .address_space,
59275927 .float_mode,
59285928 .reduce_op,
5929 .call_options,
5929 .modifier,
59305930 .prefetch_options,
59315931 .export_options,
59325932 .extern_options,
......@@ -5991,7 +5991,7 @@ pub const Type = extern union {
59915991 address_space,
59925992 float_mode,
59935993 reduce_op,
5994 call_options,
5994 modifier,
59955995 prefetch_options,
59965996 export_options,
59975997 extern_options,
......@@ -6131,7 +6131,7 @@ pub const Type = extern union {
61316131 .address_space,
61326132 .float_mode,
61336133 .reduce_op,
6134 .call_options,
6134 .modifier,
61356135 .prefetch_options,
61366136 .export_options,
61376137 .extern_options,
src/value.zig+5-5
......@@ -71,7 +71,7 @@ pub const Value = extern union {
7171 address_space_type,
7272 float_mode_type,
7373 reduce_op_type,
74 call_options_type,
74 modifier_type,
7575 prefetch_options_type,
7676 export_options_type,
7777 extern_options_type,
......@@ -264,7 +264,7 @@ pub const Value = extern union {
264264 .address_space_type,
265265 .float_mode_type,
266266 .reduce_op_type,
267 .call_options_type,
267 .modifier_type,
268268 .prefetch_options_type,
269269 .export_options_type,
270270 .extern_options_type,
......@@ -467,7 +467,7 @@ pub const Value = extern union {
467467 .address_space_type,
468468 .float_mode_type,
469469 .reduce_op_type,
470 .call_options_type,
470 .modifier_type,
471471 .prefetch_options_type,
472472 .export_options_type,
473473 .extern_options_type,
......@@ -723,7 +723,7 @@ pub const Value = extern union {
723723 .address_space_type => return out_stream.writeAll("std.builtin.AddressSpace"),
724724 .float_mode_type => return out_stream.writeAll("std.builtin.FloatMode"),
725725 .reduce_op_type => return out_stream.writeAll("std.builtin.ReduceOp"),
726 .call_options_type => return out_stream.writeAll("std.builtin.CallOptions"),
726 .modifier_type => return out_stream.writeAll("std.builtin.CallModifier"),
727727 .prefetch_options_type => return out_stream.writeAll("std.builtin.PrefetchOptions"),
728728 .export_options_type => return out_stream.writeAll("std.builtin.ExportOptions"),
729729 .extern_options_type => return out_stream.writeAll("std.builtin.ExternOptions"),
......@@ -963,7 +963,7 @@ pub const Value = extern union {
963963 .address_space_type => Type.initTag(.address_space),
964964 .float_mode_type => Type.initTag(.float_mode),
965965 .reduce_op_type => Type.initTag(.reduce_op),
966 .call_options_type => Type.initTag(.call_options),
966 .modifier_type => Type.initTag(.modifier),
967967 .prefetch_options_type => Type.initTag(.prefetch_options),
968968 .export_options_type => Type.initTag(.export_options),
969969 .extern_options_type => Type.initTag(.extern_options),