Zig Version
0.17.0-dev.332+4a65cc4ac
Steps to Reproduce and Observed Behavior
Compile the following zig code and execute the generated binary:
conststd=@import("std");constInner=struct{something:u64=0,fngetOuter(inner:*Inner)*Outer{return@alignCast(@fieldParentPtr("inner",inner));}};constOuter=struct{// something_else: u8 align(32),something_else:u8align(128),inner:Inner=.{},pubvarinstance:Outer=undefined;};pubfnmain()void{// const outer_ptr: *Outer = @alignCast(@fieldParentPtr("inner", &Outer.instance.inner));constouter_ptr:*Outer=Outer.instance.inner.getOuter();std.debug.print("normal: {*}, fieldparentptr {*}\n",.{&Outer.instance,outer_ptr});}This produces a panic:
/home/td/dev/zig_repro/repro.zig:7:16: 0x11d4887 in getOuter (repro.zig)
return @alignCast(@fieldParentPtr("inner", inner));
^
/home/td/dev/zig_repro/repro.zig:23:60: 0x11d4694 in main (repro.zig)
const outer_ptr: *Outer = Outer.instance.inner.getOuter();
^
/home/td/.cache/zig/p/N-V-__8AAGQMGBacuFYI9Kdl6UCkeu83slONrXrW8SX38YNn/lib/std/start.zig:711:59: 0x11d3fa1 in callMain (std.zig)
if (fn_info.params.len == 0) return wrapMain(root.main());
^
/home/td/.cache/zig/p/N-V-__8AAGQMGBacuFYI9Kdl6UCkeu83slONrXrW8SX38YNn/lib/std/start.zig:203:5: 0x11d39d1 in _start (std.zig)
asm volatile (switch (native_arch) {
^
Aborted (core dumped) zig 0.17.0-dev.332+4a65cc4ac run repro.zig
Uncommenting either of the commented lines or passing -fllvm makes the program behave as expected.
Expected Behavior
The program prints "normal: <some_value>, fieldparentptr <the_same_value_again>\n"
### Zig Version
0.17.0-dev.332+4a65cc4ac
### Steps to Reproduce and Observed Behavior
Compile the following zig code and execute the generated binary:
```zig
const std = @import("std");
const Inner = struct {
something: u64 = 0,
fn getOuter(inner: *Inner) *Outer {
return @alignCast(@fieldParentPtr("inner", inner));
}
};
const Outer = struct {
// something_else: u8 align(32),
something_else: u8 align(128),
inner: Inner = .{},
pub var instance: Outer = undefined;
};
pub fn main() void {
// const outer_ptr: *Outer = @alignCast(@fieldParentPtr("inner", &Outer.instance.inner));
const outer_ptr: *Outer = Outer.instance.inner.getOuter();
std.debug.print("normal: {*}, fieldparentptr {*}\n", .{&Outer.instance, outer_ptr});
}
```
This produces a panic:
```
/home/td/dev/zig_repro/repro.zig:7:16: 0x11d4887 in getOuter (repro.zig)
return @alignCast(@fieldParentPtr("inner", inner));
^
/home/td/dev/zig_repro/repro.zig:23:60: 0x11d4694 in main (repro.zig)
const outer_ptr: *Outer = Outer.instance.inner.getOuter();
^
/home/td/.cache/zig/p/N-V-__8AAGQMGBacuFYI9Kdl6UCkeu83slONrXrW8SX38YNn/lib/std/start.zig:711:59: 0x11d3fa1 in callMain (std.zig)
if (fn_info.params.len == 0) return wrapMain(root.main());
^
/home/td/.cache/zig/p/N-V-__8AAGQMGBacuFYI9Kdl6UCkeu83slONrXrW8SX38YNn/lib/std/start.zig:203:5: 0x11d39d1 in _start (std.zig)
asm volatile (switch (native_arch) {
^
Aborted (core dumped) zig 0.17.0-dev.332+4a65cc4ac run repro.zig
```
Uncommenting either of the commented lines or passing `-fllvm` makes the program behave as expected.
### Expected Behavior
The program prints "normal: <some_value>, fieldparentptr <the_same_value_again>\n"