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 13:14:20+02:00
log08b2d491bcd8c79c68495267cc71967661caea1e
treef6c8436094170f3dd197ffec479aec575c875d19
parent7b2a936173165002105ba5e76bed69654e132fea

update usages of `@call`


21 files changed, 103 insertions(+), 109 deletions(-)

lib/compiler_rt/stack_probe.zig+7-7
......@@ -236,27 +236,27 @@ fn win_probe_stack_adjust_sp() void {
236236
237237pub fn _chkstk() callconv(.Naked) void {
238238 @setRuntimeSafety(false);
239 @call(.{ .modifier = .always_inline }, win_probe_stack_adjust_sp, .{});
239 @call(.always_inline, win_probe_stack_adjust_sp, .{});
240240}
241241pub fn __chkstk() callconv(.Naked) void {
242242 @setRuntimeSafety(false);
243243 if (comptime arch.isAARCH64()) {
244 @call(.{ .modifier = .always_inline }, win_probe_stack_only, .{});
244 @call(.always_inline, win_probe_stack_only, .{});
245245 } else switch (arch) {
246 .x86 => @call(.{ .modifier = .always_inline }, win_probe_stack_adjust_sp, .{}),
247 .x86_64 => @call(.{ .modifier = .always_inline }, win_probe_stack_only, .{}),
246 .x86 => @call(.always_inline, win_probe_stack_adjust_sp, .{}),
247 .x86_64 => @call(.always_inline, win_probe_stack_only, .{}),
248248 else => unreachable,
249249 }
250250}
251251pub fn ___chkstk() callconv(.Naked) void {
252252 @setRuntimeSafety(false);
253 @call(.{ .modifier = .always_inline }, win_probe_stack_adjust_sp, .{});
253 @call(.always_inline, win_probe_stack_adjust_sp, .{});
254254}
255255pub fn __chkstk_ms() callconv(.Naked) void {
256256 @setRuntimeSafety(false);
257 @call(.{ .modifier = .always_inline }, win_probe_stack_only, .{});
257 @call(.always_inline, win_probe_stack_only, .{});
258258}
259259pub fn ___chkstk_ms() callconv(.Naked) void {
260260 @setRuntimeSafety(false);
261 @call(.{ .modifier = .always_inline }, win_probe_stack_only, .{});
261 @call(.always_inline, win_probe_stack_only, .{});
262262}
lib/std/Thread.zig+4-4
......@@ -387,10 +387,10 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
387387
388388 switch (@typeInfo(@typeInfo(@TypeOf(f)).Fn.return_type.?)) {
389389 .NoReturn => {
390 @call(.{}, f, args);
390 @call(.auto, f, args);
391391 },
392392 .Void => {
393 @call(.{}, f, args);
393 @call(.auto, f, args);
394394 return default_value;
395395 },
396396 .Int => |info| {
......@@ -398,7 +398,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
398398 @compileError(bad_fn_ret);
399399 }
400400
401 const status = @call(.{}, f, args);
401 const status = @call(.auto, f, args);
402402 if (Impl != PosixThreadImpl) {
403403 return status;
404404 }
......@@ -411,7 +411,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
411411 @compileError(bad_fn_ret);
412412 }
413413
414 @call(.{}, f, args) catch |err| {
414 @call(.auto, f, args) catch |err| {
415415 std.debug.print("error: {s}\n", .{@errorName(err)});
416416 if (@errorReturnTrace()) |trace| {
417417 std.debug.dumpStackTrace(trace.*);
lib/std/crypto/siphash.zig+6-13
......@@ -78,12 +78,10 @@ fn SipHashStateless(comptime T: type, comptime c_rounds: usize, comptime d_round
7878 pub fn update(self: *Self, b: []const u8) void {
7979 std.debug.assert(b.len % 8 == 0);
8080
81 const inl = std.builtin.CallOptions{ .modifier = .always_inline };
82
8381 var off: usize = 0;
8482 while (off < b.len) : (off += 8) {
8583 const blob = b[off..][0..8].*;
86 @call(inl, round, .{ self, blob });
84 @call(.always_inline, round, .{ self, blob });
8785 }
8886
8987 self.msg_len +%= @truncate(u8, b.len);
......@@ -105,12 +103,9 @@ fn SipHashStateless(comptime T: type, comptime c_rounds: usize, comptime d_round
105103 self.v2 ^= 0xff;
106104 }
107105
108 // TODO this is a workaround, should be able to supply the value without a separate variable
109 const inl = std.builtin.CallOptions{ .modifier = .always_inline };
110
111106 comptime var i: usize = 0;
112107 inline while (i < d_rounds) : (i += 1) {
113 @call(inl, sipRound, .{self});
108 @call(.always_inline, sipRound, .{self});
114109 }
115110
116111 const b1 = self.v0 ^ self.v1 ^ self.v2 ^ self.v3;
......@@ -122,7 +117,7 @@ fn SipHashStateless(comptime T: type, comptime c_rounds: usize, comptime d_round
122117
123118 comptime var j: usize = 0;
124119 inline while (j < d_rounds) : (j += 1) {
125 @call(inl, sipRound, .{self});
120 @call(.always_inline, sipRound, .{self});
126121 }
127122
128123 const b2 = self.v0 ^ self.v1 ^ self.v2 ^ self.v3;
......@@ -133,11 +128,9 @@ fn SipHashStateless(comptime T: type, comptime c_rounds: usize, comptime d_round
133128 const m = mem.readIntLittle(u64, b[0..8]);
134129 self.v3 ^= m;
135130
136 // TODO this is a workaround, should be able to supply the value without a separate variable
137 const inl = std.builtin.CallOptions{ .modifier = .always_inline };
138131 comptime var i: usize = 0;
139132 inline while (i < c_rounds) : (i += 1) {
140 @call(inl, sipRound, .{self});
133 @call(.always_inline, sipRound, .{self});
141134 }
142135
143136 self.v0 ^= m;
......@@ -163,8 +156,8 @@ fn SipHashStateless(comptime T: type, comptime c_rounds: usize, comptime d_round
163156 pub fn hash(msg: []const u8, key: *const [key_length]u8) T {
164157 const aligned_len = msg.len - (msg.len % 8);
165158 var c = Self.init(key);
166 @call(.{ .modifier = .always_inline }, c.update, .{msg[0..aligned_len]});
167 return @call(.{ .modifier = .always_inline }, c.final, .{msg[aligned_len..]});
159 @call(.always_inline, c.update, .{msg[0..aligned_len]});
160 return @call(.always_inline, c.final, .{msg[aligned_len..]});
168161 }
169162 };
170163}
lib/std/dynamic_library.zig+1-1
......@@ -381,7 +381,7 @@ pub const DlDynlib = struct {
381381 pub fn lookup(self: *DlDynlib, comptime T: type, name: [:0]const u8) ?T {
382382 // dlsym (and other dl-functions) secretly take shadow parameter - return address on stack
383383 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66826
384 if (@call(.{ .modifier = .never_tail }, system.dlsym, .{ self.handle, name.ptr })) |symbol| {
384 if (@call(.never_tail, system.dlsym, .{ self.handle, name.ptr })) |symbol| {
385385 return @ptrCast(T, symbol);
386386 } else {
387387 return null;
lib/std/hash/auto_hash.zig+4-4
......@@ -66,7 +66,7 @@ pub fn hash(hasher: anytype, key: anytype, comptime strat: HashStrategy) void {
6666 const Key = @TypeOf(key);
6767
6868 if (strat == .Shallow and comptime meta.trait.hasUniqueRepresentation(Key)) {
69 @call(.{ .modifier = .always_inline }, hasher.update, .{mem.asBytes(&key)});
69 @call(.always_inline, hasher.update, .{mem.asBytes(&key)});
7070 return;
7171 }
7272
......@@ -89,12 +89,12 @@ pub fn hash(hasher: anytype, key: anytype, comptime strat: HashStrategy) void {
8989 // TODO Check if the situation is better after #561 is resolved.
9090 .Int => {
9191 if (comptime meta.trait.hasUniqueRepresentation(Key)) {
92 @call(.{ .modifier = .always_inline }, hasher.update, .{std.mem.asBytes(&key)});
92 @call(.always_inline, hasher.update, .{std.mem.asBytes(&key)});
9393 } else {
9494 // Take only the part containing the key value, the remaining
9595 // bytes are undefined and must not be hashed!
9696 const byte_size = comptime std.math.divCeil(comptime_int, @bitSizeOf(Key), 8) catch unreachable;
97 @call(.{ .modifier = .always_inline }, hasher.update, .{std.mem.asBytes(&key)[0..byte_size]});
97 @call(.always_inline, hasher.update, .{std.mem.asBytes(&key)[0..byte_size]});
9898 }
9999 },
100100
......@@ -103,7 +103,7 @@ pub fn hash(hasher: anytype, key: anytype, comptime strat: HashStrategy) void {
103103 .ErrorSet => hash(hasher, @errorToInt(key), strat),
104104 .AnyFrame, .Fn => hash(hasher, @ptrToInt(key), strat),
105105
106 .Pointer => @call(.{ .modifier = .always_inline }, hashPointer, .{ hasher, key, strat }),
106 .Pointer => @call(.always_inline, hashPointer, .{ hasher, key, strat }),
107107
108108 .Optional => if (key) |k| hash(hasher, k, strat),
109109
lib/std/hash/cityhash.zig+4-4
......@@ -185,7 +185,7 @@ pub const CityHash64 = struct {
185185 }
186186
187187 fn hashLen16(u: u64, v: u64) u64 {
188 return @call(.{ .modifier = .always_inline }, hash128To64, .{ u, v });
188 return @call(.always_inline, hash128To64, .{ u, v });
189189 }
190190
191191 fn hashLen16Mul(low: u64, high: u64, mul: u64) u64 {
......@@ -198,7 +198,7 @@ pub const CityHash64 = struct {
198198 }
199199
200200 fn hash128To64(low: u64, high: u64) u64 {
201 return @call(.{ .modifier = .always_inline }, hashLen16Mul, .{ low, high, 0x9ddfea08eb382d69 });
201 return @call(.always_inline, hashLen16Mul, .{ low, high, 0x9ddfea08eb382d69 });
202202 }
203203
204204 fn hashLen0To16(str: []const u8) u64 {
......@@ -279,7 +279,7 @@ pub const CityHash64 = struct {
279279 }
280280
281281 fn weakHashLen32WithSeeds(ptr: [*]const u8, a: u64, b: u64) WeakPair {
282 return @call(.{ .modifier = .always_inline }, weakHashLen32WithSeedsHelper, .{
282 return @call(.always_inline, weakHashLen32WithSeedsHelper, .{
283283 fetch64(ptr, 0),
284284 fetch64(ptr, 8),
285285 fetch64(ptr, 16),
......@@ -334,7 +334,7 @@ pub const CityHash64 = struct {
334334 }
335335
336336 pub fn hashWithSeed(str: []const u8, seed: u64) u64 {
337 return @call(.{ .modifier = .always_inline }, Self.hashWithSeeds, .{ str, k2, seed });
337 return @call(.always_inline, Self.hashWithSeeds, .{ str, k2, seed });
338338 }
339339
340340 pub fn hashWithSeeds(str: []const u8, seed0: u64, seed1: u64) u64 {
lib/std/hash/murmur.zig+9-9
......@@ -9,7 +9,7 @@ pub const Murmur2_32 = struct {
99 const Self = @This();
1010
1111 pub fn hash(str: []const u8) u32 {
12 return @call(.{ .modifier = .always_inline }, Self.hashWithSeed, .{ str, default_seed });
12 return @call(.always_inline, Self.hashWithSeed, .{ str, default_seed });
1313 }
1414
1515 pub fn hashWithSeed(str: []const u8, seed: u32) u32 {
......@@ -45,7 +45,7 @@ pub const Murmur2_32 = struct {
4545 }
4646
4747 pub fn hashUint32(v: u32) u32 {
48 return @call(.{ .modifier = .always_inline }, Self.hashUint32WithSeed, .{ v, default_seed });
48 return @call(.always_inline, Self.hashUint32WithSeed, .{ v, default_seed });
4949 }
5050
5151 pub fn hashUint32WithSeed(v: u32, seed: u32) u32 {
......@@ -65,7 +65,7 @@ pub const Murmur2_32 = struct {
6565 }
6666
6767 pub fn hashUint64(v: u64) u32 {
68 return @call(.{ .modifier = .always_inline }, Self.hashUint64WithSeed, .{ v, default_seed });
68 return @call(.always_inline, Self.hashUint64WithSeed, .{ v, default_seed });
6969 }
7070
7171 pub fn hashUint64WithSeed(v: u64, seed: u32) u32 {
......@@ -94,7 +94,7 @@ pub const Murmur2_64 = struct {
9494 const Self = @This();
9595
9696 pub fn hash(str: []const u8) u64 {
97 return @call(.{ .modifier = .always_inline }, Self.hashWithSeed, .{ str, default_seed });
97 return @call(.always_inline, Self.hashWithSeed, .{ str, default_seed });
9898 }
9999
100100 pub fn hashWithSeed(str: []const u8, seed: u64) u64 {
......@@ -128,7 +128,7 @@ pub const Murmur2_64 = struct {
128128 }
129129
130130 pub fn hashUint32(v: u32) u64 {
131 return @call(.{ .modifier = .always_inline }, Self.hashUint32WithSeed, .{ v, default_seed });
131 return @call(.always_inline, Self.hashUint32WithSeed, .{ v, default_seed });
132132 }
133133
134134 pub fn hashUint32WithSeed(v: u32, seed: u64) u64 {
......@@ -145,7 +145,7 @@ pub const Murmur2_64 = struct {
145145 }
146146
147147 pub fn hashUint64(v: u64) u64 {
148 return @call(.{ .modifier = .always_inline }, Self.hashUint64WithSeed, .{ v, default_seed });
148 return @call(.always_inline, Self.hashUint64WithSeed, .{ v, default_seed });
149149 }
150150
151151 pub fn hashUint64WithSeed(v: u64, seed: u64) u64 {
......@@ -173,7 +173,7 @@ pub const Murmur3_32 = struct {
173173 }
174174
175175 pub fn hash(str: []const u8) u32 {
176 return @call(.{ .modifier = .always_inline }, Self.hashWithSeed, .{ str, default_seed });
176 return @call(.always_inline, Self.hashWithSeed, .{ str, default_seed });
177177 }
178178
179179 pub fn hashWithSeed(str: []const u8, seed: u32) u32 {
......@@ -221,7 +221,7 @@ pub const Murmur3_32 = struct {
221221 }
222222
223223 pub fn hashUint32(v: u32) u32 {
224 return @call(.{ .modifier = .always_inline }, Self.hashUint32WithSeed, .{ v, default_seed });
224 return @call(.always_inline, Self.hashUint32WithSeed, .{ v, default_seed });
225225 }
226226
227227 pub fn hashUint32WithSeed(v: u32, seed: u32) u32 {
......@@ -247,7 +247,7 @@ pub const Murmur3_32 = struct {
247247 }
248248
249249 pub fn hashUint64(v: u64) u32 {
250 return @call(.{ .modifier = .always_inline }, Self.hashUint64WithSeed, .{ v, default_seed });
250 return @call(.always_inline, Self.hashUint64WithSeed, .{ v, default_seed });
251251 }
252252
253253 pub fn hashUint64WithSeed(v: u64, seed: u32) u32 {
lib/std/hash/wyhash.zig+3-3
......@@ -65,7 +65,7 @@ const WyhashStateless = struct {
6565
6666 var off: usize = 0;
6767 while (off < b.len) : (off += 32) {
68 @call(.{ .modifier = .always_inline }, self.round, .{b[off .. off + 32]});
68 @call(.always_inline, self.round, .{b[off .. off + 32]});
6969 }
7070
7171 self.msg_len += b.len;
......@@ -121,8 +121,8 @@ const WyhashStateless = struct {
121121 const aligned_len = input.len - (input.len % 32);
122122
123123 var c = WyhashStateless.init(seed);
124 @call(.{ .modifier = .always_inline }, c.update, .{input[0..aligned_len]});
125 return @call(.{ .modifier = .always_inline }, c.final, .{input[aligned_len..]});
124 @call(.always_inline, c.update, .{input[0..aligned_len]});
125 return @call(.always_inline, c.final, .{input[aligned_len..]});
126126 }
127127};
128128
lib/std/math/big/int.zig+2-2
......@@ -3587,7 +3587,7 @@ fn llshl(r: []Limb, a: []const Limb, shift: usize) void {
35873587 const dst_i = src_i + limb_shift;
35883588
35893589 const src_digit = a[src_i];
3590 r[dst_i] = carry | @call(.{ .modifier = .always_inline }, math.shr, .{
3590 r[dst_i] = carry | @call(.always_inline, math.shr, .{
35913591 Limb,
35923592 src_digit,
35933593 limb_bits - @intCast(Limb, interior_limb_shift),
......@@ -3615,7 +3615,7 @@ fn llshr(r: []Limb, a: []const Limb, shift: usize) void {
36153615
36163616 const src_digit = a[src_i];
36173617 r[dst_i] = carry | (src_digit >> interior_limb_shift);
3618 carry = @call(.{ .modifier = .always_inline }, math.shl, .{
3618 carry = @call(.always_inline, math.shl, .{
36193619 Limb,
36203620 src_digit,
36213621 limb_bits - @intCast(Limb, interior_limb_shift),
lib/std/os/linux.zig+1-1
......@@ -263,7 +263,7 @@ pub fn fork() usize {
263263/// the compiler is not aware of how vfork affects control flow and you may
264264/// see different results in optimized builds.
265265pub inline fn vfork() usize {
266 return @call(.{ .modifier = .always_inline }, syscall0, .{.vfork});
266 return @call(.always_inline, syscall0, .{.vfork});
267267}
268268
269269pub fn futimens(fd: i32, times: *const [2]timespec) usize {
lib/std/start.zig+9-9
......@@ -229,15 +229,15 @@ fn _DllMainCRTStartup(
229229fn wasm_freestanding_start() callconv(.C) void {
230230 // This is marked inline because for some reason LLVM in
231231 // release mode fails to inline it, and we want fewer call frames in stack traces.
232 _ = @call(.{ .modifier = .always_inline }, callMain, .{});
232 _ = @call(.always_inline, callMain, .{});
233233}
234234
235235fn wasi_start() callconv(.C) void {
236236 // The function call is marked inline because for some reason LLVM in
237237 // release mode fails to inline it, and we want fewer call frames in stack traces.
238238 switch (builtin.wasi_exec_model) {
239 .reactor => _ = @call(.{ .modifier = .always_inline }, callMain, .{}),
240 .command => std.os.wasi.proc_exit(@call(.{ .modifier = .always_inline }, callMain, .{})),
239 .reactor => _ = @call(.always_inline, callMain, .{}),
240 .command => std.os.wasi.proc_exit(@call(.always_inline, callMain, .{})),
241241 }
242242}
243243
......@@ -373,7 +373,7 @@ fn _start() callconv(.Naked) noreturn {
373373 }
374374 // If LLVM inlines stack variables into _start, they will overwrite
375375 // the command line argument data.
376 @call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{});
376 @call(.never_inline, posixCallMainAndExit, .{});
377377}
378378
379379fn WinStartup() callconv(std.os.windows.WINAPI) noreturn {
......@@ -459,7 +459,7 @@ fn posixCallMainAndExit() callconv(.C) noreturn {
459459 expandStackSize(phdrs);
460460 }
461461
462 std.os.exit(@call(.{ .modifier = .always_inline }, callMainWithArgs, .{ argc, argv, envp }));
462 std.os.exit(@call(.always_inline, callMainWithArgs, .{ argc, argv, envp }));
463463}
464464
465465fn expandStackSize(phdrs: []elf.Phdr) void {
......@@ -510,12 +510,12 @@ fn main(c_argc: c_int, c_argv: [*c][*c]u8, c_envp: [*c][*c]u8) callconv(.C) c_in
510510 expandStackSize(phdrs);
511511 }
512512
513 return @call(.{ .modifier = .always_inline }, callMainWithArgs, .{ @intCast(usize, c_argc), @ptrCast([*][*:0]u8, c_argv), envp });
513 return @call(.always_inline, callMainWithArgs, .{ @intCast(usize, c_argc), @ptrCast([*][*:0]u8, c_argv), envp });
514514}
515515
516516fn mainWithoutEnv(c_argc: c_int, c_argv: [*c][*c]u8) callconv(.C) c_int {
517517 std.os.argv = @ptrCast([*][*:0]u8, c_argv)[0..@intCast(usize, c_argc)];
518 return @call(.{ .modifier = .always_inline }, callMain, .{});
518 return @call(.always_inline, callMain, .{});
519519}
520520
521521// General error message for a malformed return type
......@@ -545,7 +545,7 @@ inline fn initEventLoopAndCallMain() u8 {
545545
546546 // This is marked inline because for some reason LLVM in release mode fails to inline it,
547547 // and we want fewer call frames in stack traces.
548 return @call(.{ .modifier = .always_inline }, callMain, .{});
548 return @call(.always_inline, callMain, .{});
549549}
550550
551551// This is marked inline because for some reason LLVM in release mode fails to inline it,
......@@ -574,7 +574,7 @@ inline fn initEventLoopAndCallWinMain() std.os.windows.INT {
574574
575575 // This is marked inline because for some reason LLVM in release mode fails to inline it,
576576 // and we want fewer call frames in stack traces.
577 return @call(.{ .modifier = .always_inline }, call_wWinMain, .{});
577 return @call(.always_inline, call_wWinMain, .{});
578578}
579579
580580fn callMainAsync(loop: *std.event.Loop) callconv(.Async) u8 {
lib/std/testing.zig+2-2
......@@ -828,7 +828,7 @@ pub fn checkAllAllocationFailures(backing_allocator: std.mem.Allocator, comptime
828828 var failing_allocator_inst = std.testing.FailingAllocator.init(backing_allocator, std.math.maxInt(usize));
829829 args.@"0" = failing_allocator_inst.allocator();
830830
831 try @call(.{}, test_fn, args);
831 try @call(.auto, test_fn, args);
832832 break :x failing_allocator_inst.index;
833833 };
834834
......@@ -837,7 +837,7 @@ pub fn checkAllAllocationFailures(backing_allocator: std.mem.Allocator, comptime
837837 var failing_allocator_inst = std.testing.FailingAllocator.init(backing_allocator, fail_index);
838838 args.@"0" = failing_allocator_inst.allocator();
839839
840 if (@call(.{}, test_fn, args)) |_| {
840 if (@call(.auto, test_fn, args)) |_| {
841841 if (failing_allocator_inst.has_induced_failure) {
842842 return error.SwallowedOutOfMemoryError;
843843 } else {
lib/std/unicode/throughput_test.zig+1-1
......@@ -25,7 +25,7 @@ fn benchmarkCodepointCount(buf: []const u8) !ResultCount {
2525 var r: usize = undefined;
2626 while (i < N) : (i += 1) {
2727 r = try @call(
28 .{ .modifier = .never_inline },
28 .never_inline,
2929 std.unicode.utf8CountCodepoints,
3030 .{buf},
3131 );
src/ThreadPool.zig+2-2
......@@ -71,7 +71,7 @@ fn join(pool: *ThreadPool, spawned: usize) void {
7171
7272pub fn spawn(pool: *ThreadPool, comptime func: anytype, args: anytype) !void {
7373 if (builtin.single_threaded) {
74 @call(.{}, func, args);
74 @call(.auto, func, args);
7575 return;
7676 }
7777
......@@ -84,7 +84,7 @@ pub fn spawn(pool: *ThreadPool, comptime func: anytype, args: anytype) !void {
8484 fn runFn(runnable: *Runnable) void {
8585 const run_node = @fieldParentPtr(RunQueue.Node, "data", runnable);
8686 const closure = @fieldParentPtr(@This(), "run_node", run_node);
87 @call(.{}, func, closure.arguments);
87 @call(.auto, func, closure.arguments);
8888
8989 // The thread pool's allocator is protected by the mutex.
9090 const mutex = &closure.pool.mutex;
src/crash_report.zig+2-2
......@@ -549,8 +549,8 @@ const PanicSwitch = struct {
549549 // TODO: Tailcall is broken right now, but eventually this should be used
550550 // to avoid blowing up the stack. It's ok for now though, there are no
551551 // cycles in the state machine so the max stack usage is bounded.
552 //@call(.{.modifier = .always_tail}, func, args);
553 @call(.{}, func, args);
552 //@call(.always_tail, func, args);
553 @call(.auto, func, args);
554554 }
555555
556556 fn recover(
test/behavior/basic.zig+2-2
......@@ -966,8 +966,8 @@ test "generic function uses return type of other generic function" {
966966 fn call(
967967 f: anytype,
968968 args: anytype,
969 ) @TypeOf(@call(.{}, f, @as(@TypeOf(args), undefined))) {
970 return @call(.{}, f, args);
969 ) @TypeOf(@call(.auto, f, @as(@TypeOf(args), undefined))) {
970 return @call(.auto, f, args);
971971 }
972972
973973 fn func(arg: anytype) @TypeOf(arg) {
test/behavior/call.zig+26-26
......@@ -9,11 +9,11 @@ test "super basic invocations" {
99 return 1234;
1010 }
1111 }.foo;
12 try expect(@call(.{}, foo, .{}) == 1234);
13 comptime try expect(@call(.{ .modifier = .always_inline }, foo, .{}) == 1234);
12 try expect(@call(.auto, foo, .{}) == 1234);
13 comptime try expect(@call(.always_inline, foo, .{}) == 1234);
1414 {
1515 // comptime call without comptime keyword
16 const result = @call(.{ .modifier = .compile_time }, foo, .{}) == 1234;
16 const result = @call(.compile_time, foo, .{}) == 1234;
1717 comptime try expect(result);
1818 }
1919}
......@@ -31,25 +31,25 @@ test "basic invocations" {
3131 return 1234;
3232 }
3333 }.foo;
34 try expect(@call(.{}, foo, .{}) == 1234);
34 try expect(@call(.auto, foo, .{}) == 1234);
3535 comptime {
3636 // modifiers that allow comptime calls
37 try expect(@call(.{}, foo, .{}) == 1234);
38 try expect(@call(.{ .modifier = .no_async }, foo, .{}) == 1234);
39 try expect(@call(.{ .modifier = .always_tail }, foo, .{}) == 1234);
40 try expect(@call(.{ .modifier = .always_inline }, foo, .{}) == 1234);
37 try expect(@call(.auto, foo, .{}) == 1234);
38 try expect(@call(.no_async, foo, .{}) == 1234);
39 try expect(@call(.always_tail, foo, .{}) == 1234);
40 try expect(@call(.always_inline, foo, .{}) == 1234);
4141 }
4242 {
4343 // comptime call without comptime keyword
44 const result = @call(.{ .modifier = .compile_time }, foo, .{}) == 1234;
44 const result = @call(.compile_time, foo, .{}) == 1234;
4545 comptime try expect(result);
4646 }
4747 {
4848 // call of non comptime-known function
4949 var alias_foo = &foo;
50 try expect(@call(.{ .modifier = .no_async }, alias_foo, .{}) == 1234);
51 try expect(@call(.{ .modifier = .never_tail }, alias_foo, .{}) == 1234);
52 try expect(@call(.{ .modifier = .never_inline }, alias_foo, .{}) == 1234);
50 try expect(@call(.no_async, alias_foo, .{}) == 1234);
51 try expect(@call(.never_tail, alias_foo, .{}) == 1234);
52 try expect(@call(.never_inline, alias_foo, .{}) == 1234);
5353 }
5454}
5555
......@@ -66,23 +66,23 @@ test "tuple parameters" {
6666 }.add;
6767 var a: i32 = 12;
6868 var b: i32 = 34;
69 try expect(@call(.{}, add, .{ a, 34 }) == 46);
70 try expect(@call(.{}, add, .{ 12, b }) == 46);
71 try expect(@call(.{}, add, .{ a, b }) == 46);
72 try expect(@call(.{}, add, .{ 12, 34 }) == 46);
69 try expect(@call(.auto, add, .{ a, 34 }) == 46);
70 try expect(@call(.auto, add, .{ 12, b }) == 46);
71 try expect(@call(.auto, add, .{ a, b }) == 46);
72 try expect(@call(.auto, add, .{ 12, 34 }) == 46);
7373 if (false) {
74 comptime try expect(@call(.{}, add, .{ 12, 34 }) == 46); // TODO
74 comptime try expect(@call(.auto, add, .{ 12, 34 }) == 46); // TODO
7575 }
76 try expect(comptime @call(.{}, add, .{ 12, 34 }) == 46);
76 try expect(comptime @call(.auto, add, .{ 12, 34 }) == 46);
7777 {
7878 const separate_args0 = .{ a, b };
7979 const separate_args1 = .{ a, 34 };
8080 const separate_args2 = .{ 12, 34 };
8181 const separate_args3 = .{ 12, b };
82 try expect(@call(.{ .modifier = .always_inline }, add, separate_args0) == 46);
83 try expect(@call(.{ .modifier = .always_inline }, add, separate_args1) == 46);
84 try expect(@call(.{ .modifier = .always_inline }, add, separate_args2) == 46);
85 try expect(@call(.{ .modifier = .always_inline }, add, separate_args3) == 46);
82 try expect(@call(.always_inline, add, separate_args0) == 46);
83 try expect(@call(.always_inline, add, separate_args1) == 46);
84 try expect(@call(.always_inline, add, separate_args2) == 46);
85 try expect(@call(.always_inline, add, separate_args3) == 46);
8686 }
8787}
8888
......@@ -281,7 +281,7 @@ test "forced tail call" {
281281 if (n == 0) return a;
282282 if (n == 1) return b;
283283 return @call(
284 .{ .modifier = .always_tail },
284 .always_tail,
285285 fibonacciTailInternal,
286286 .{ n - 1, b, a + b },
287287 );
......@@ -322,7 +322,7 @@ test "inline call preserves tail call" {
322322 var buf: [max]u16 = undefined;
323323 buf[a] = a;
324324 a += 1;
325 return @call(.{ .modifier = .always_tail }, foo, .{});
325 return @call(.always_tail, foo, .{});
326326 }
327327 };
328328 S.foo();
......@@ -341,6 +341,6 @@ test "inline call doesn't re-evaluate non generic struct" {
341341 }
342342 };
343343 const ArgTuple = std.meta.ArgsTuple(@TypeOf(S.foo));
344 try @call(.{ .modifier = .always_inline }, S.foo, ArgTuple{.{ .a = 123, .b = 45 }});
345 comptime try @call(.{ .modifier = .always_inline }, S.foo, ArgTuple{.{ .a = 123, .b = 45 }});
344 try @call(.always_inline, S.foo, ArgTuple{.{ .a = 123, .b = 45 }});
345 comptime try @call(.always_inline, S.foo, ArgTuple{.{ .a = 123, .b = 45 }});
346346}
test/cases/compile_errors/bad_usage_of_call.zig+12-11
......@@ -1,22 +1,22 @@
11export fn entry1() void {
2 @call(.{}, foo, {});
2 @call(.auto, foo, {});
33}
44export fn entry2() void {
5 comptime @call(.{ .modifier = .never_inline }, foo, .{});
5 comptime @call(.never_inline, foo, .{});
66}
77export fn entry3() void {
8 comptime @call(.{ .modifier = .never_tail }, foo, .{});
8 comptime @call(.never_tail, foo, .{});
99}
1010export fn entry4() void {
11 @call(.{ .modifier = .never_inline }, bar, .{});
11 @call(.never_inline, bar, .{});
1212}
1313export fn entry5(c: bool) void {
1414 var baz = if (c) &baz1 else &baz2;
15 @call(.{ .modifier = .compile_time }, baz, .{});
15 @call(.compile_time, baz, .{});
1616}
1717pub export fn entry() void {
1818 var call_me: *const fn () void = undefined;
19 @call(.{ .modifier = .always_inline }, call_me, .{});
19 @call(.always_inline, call_me, .{});
2020}
2121fn foo() void {}
2222fn bar() callconv(.Inline) void {}
......@@ -27,9 +27,10 @@ fn baz2() void {}
2727// backend=stage2
2828// target=native
2929//
30// :2:21: error: expected a tuple, found 'void'
31// :5:33: error: unable to perform 'never_inline' call at compile-time
32// :8:33: error: unable to perform 'never_tail' call at compile-time
30// :2:23: error: expected a tuple, found 'void'
31// :5:21: error: unable to perform 'never_inline' call at compile-time
32// :8:21: error: unable to perform 'never_tail' call at compile-time
3333// :11:5: error: no-inline call of inline function
34// :15:43: error: modifier 'compile_time' requires a comptime-known function
35// :19:44: error: modifier 'always_inline' requires a comptime-known function
34// :15:26: error: modifier 'compile_time' requires a comptime-known function
35// :19:27: error: modifier 'always_inline' requires a comptime-known function
36
test/cases/compile_errors/error_in_call_builtin_args.zig+4-4
......@@ -1,15 +1,15 @@
11fn foo(_: u32, _: u32) void {}
22pub export fn entry() void {
3 @call(.{}, foo, .{ 12, 12.34 });
3 @call(.auto, foo, .{ 12, 12.34 });
44}
55pub export fn entry1() void {
66 const args = .{ 12, 12.34 };
7 @call(.{}, foo, args);
7 @call(.auto, foo, args);
88}
99
1010// error
1111// backend=stage2
1212// target=native
1313//
14// :3:28: error: fractional component prevents float value '12.34' from coercion to type 'u32'
15// :7:21: error: fractional component prevents float value '12.34' from coercion to type 'u32'
14// :3:30: error: fractional component prevents float value '12.34' from coercion to type 'u32'
15// :7:23: error: fractional component prevents float value '12.34' from coercion to type 'u32'
test/cases/compile_errors/invalid_tail_call.zig+1-1
......@@ -2,7 +2,7 @@ fn myFn(_: usize) void {
22 return;
33}
44pub export fn entry() void {
5 @call(.{ .modifier = .always_tail }, myFn, .{0});
5 @call(.always_tail, myFn, .{0});
66}
77
88// error
test/cases/taill_call_noreturn.zig+1-1
......@@ -1,7 +1,7 @@
11const std = @import("std");
22const builtin = std.builtin;
33pub fn foo(message: []const u8, stack_trace: ?*builtin.StackTrace) noreturn {
4 @call(.{ .modifier = .always_tail }, bar, .{ message, stack_trace });
4 @call(.always_tail, bar, .{ message, stack_trace });
55}
66pub fn bar(message: []const u8, stack_trace: ?*builtin.StackTrace) noreturn {
77 _ = message;