Zig Version
0.16.0-dev.1442, 0.15.2
Steps to Reproduce and Observed Behavior
On linux amd64, compile:
conststd=@import("std");
constc=@cImport({
@cInclude("grpc/grpc.h");
});
pubfnmain() !void {
consts: c.grpc_slice= .{
.refcount=null,
.data= .{ .inlined= .{
.length=5,
.bytes="Hello\x00\x00_____-----_____\x00".*,
} },
};
constd: c.gpr_timespec= .{ .tv_sec=1, .clock_type=c.GPR_TIMESPAN };
_=c.grpc_channel_create_call(
@ptrFromInt(0xDeadBeef),
null,
0,
@ptrFromInt(0xCafeBabe),
s,
&s,
d,
null,
);
}$ zig build-exe minrep.zig -l grpc -fno-llvm # possibly -L ... -I ...
$ ldd minrep libgrpc.so.51 => [...]/libgrpc.so.51 (0x00007f69da200000)[...]
Then using gdb, stop at the first line of the called function
$ gdb minrep(gdb) break grpc_channel_create_call$pltBreakpoint 1 at 0x101d020(gdb) runBreakpoint 1, 0x000000000101d020 in grpc_channel_create_call$plt ()(gdb) stepgrpc_channel_create_call (channel=0x7fffffffd7e0, parent_call=0x10870f0 <os.linux.x86_64.restore_rt>, propagation_mask=32767, completion_queue=0x7fffffffd958, method=..., host=0x20, deadline=..., reserved=0x7fffffffd810) at src/core/lib/surface/channel.cc:104104 gpr_timespec deadline, void* reserved) {(gdb) step105 GRPC_CHECK(!reserved);(gdb) info argschannel = 0xdeadbeefparent_call = 0x0propagation_mask = 0completion_queue = 0xcafebabemethod = [...]host = 0x11a3040 <__anon_26790>deadline = {tv_sec = 1, tv_nsec = 0, clock_type = GPR_TIMESPAN}reserved = 0x7fffffffdac8we can see that reserved is not 0
(Note: I built libgrpc locally to get the debug symbols)
Expected Behavior
Using the LLVM backend results in the expected behavior:
$ zig build-exe minrep.zig -L ~/Clones/grpc/libs/dbg -l grpc -I ~/Clones/grpc/include/ -fllvm
$ gdb minrep(gdb) break grpc_channel_create_callBreakpoint 1 at 0x11290c0(gdb) runBreakpoint 1, grpc_channel_create_call (channel=0xdeadbeef, parent_call=0x0, propagation_mask=0, completion_queue=0xcafebabe, method=..., host=0x100d700 <__anon_27427>, deadline=..., reserved=0x0) at src/core/lib/surface/channel.cc:104104 gpr_timespec deadline, void* reserved) {(gdb) step105 GRPC_CHECK(!reserved);(gdb) info argschannel = 0xdeadbeefparent_call = 0x0propagation_mask = 0completion_queue = 0xcafebabemethod = [...]host = 0x100d700 <__anon_27427>deadline = {tv_sec = 1, tv_nsec = 0, clock_type = GPR_TIMESPAN}reserved = 0x0Here reserved in 0
Zig Version
0.16.0-dev.1442,0.15.2Steps to Reproduce and Observed Behavior
On linux amd64, compile:
Then using gdb, stop at the first line of the called function
we can see that
reservedis not 0(Note: I built libgrpc locally to get the debug symbols)
Expected Behavior
Using the LLVM backend results in the expected behavior:
Here
reservedin 0