Skip to content

Native backend behavior with packed struct equality not matching llvm #22990

@actondev

Description

@actondev

Zig Version

0.14.0-dev.3298+6fe1993d8

Steps to Reproduce and Observed Behavior

zig test shortcuts2.zig -fno-llvm fails while zig test shortcuts2.zig passes. See in the code the 2 relevant // TODO.. comments.

Long story short, comparing 2 packed structs with std.meta.eql fails with -fno-llvm, while doing a manual

const backing = @typeInfo(Self).@"struct".backing_integer.?;
return @as(backing, @bitCast(self)) == @as(backing, @bitCast(other));

passes.

Also, in a TODO comments, I noticed that when removing a field from another struct, not of compared one, the -fno-llvm passes !?

Pardon the long reproduction scenario, but when I tried to do something slimmed down I couldn't reproduce the behacior.

PS: apparently github doesn't allow attaching .zig files..

shortcuts2.txt

Expected Behavior

Should have same behavior

Metadata

Metadata

Assignees

No one assigned

    Labels

    arch-x86_6464-bit x86backend-self-hostedbugObserved behavior contradicts documented or intended behavior

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions