// #target: macos-x64 module test; bitstruct Foo : int { bool enable_help; bool enable_version; } bitstruct Foo2 : char[2] { bool enable_help; bool enable_version; } fn void main() { Foo a = { .enable_help }; Foo b = { .enable_version }; Foo $a = { .enable_help }; Foo $b = { .enable_version }; $assert(!($a & $b)); if (a & b) return; Foo2 a2 = { .enable_help }; Foo2 b2 = { .enable_version, .enable_help }; if (!(a2 & b2)) return; } /* #expect: test.ll %a = alloca i32, align 4 %b = alloca i32, align 4 %a2 = alloca [2 x i8], align 1 %b2 = alloca [2 x i8], align 1 %0 = alloca i16, align 1 store i32 1, ptr %a, align 4 store i32 2, ptr %b, align 4 %1 = load i32, ptr %a, align 4 %2 = load i32, ptr %b, align 4 %and = and i32 %1, %2 %i2b = icmp ne i32 %and, 0 br i1 %i2b, label %if.then, label %if.exit if.then: ; preds = %entry ret void if.exit: ; preds = %entry store [2 x i8] c"\01\00", ptr %a2, align 1 store [2 x i8] c"\03\00", ptr %b2, align 1 %3 = load i16, ptr %a2, align 1 %4 = load i16, ptr %b2, align 1 %and1 = and i16 %3, %4 store i16 %and1, ptr %0, align 1 %5 = load i8, ptr %0, align 1 %zext = zext i8 %5 to i32 %ptradd = getelementptr inbounds i8, ptr %0, i64 1 %6 = load i8, ptr %ptradd, align 1 %zext2 = zext i8 %6 to i32 %7 = add i32 %zext, %zext2 %8 = icmp eq i32 %7, 0 br i1 %8, label %if.then3, label %if.exit4 if.then3: ; preds = %if.exit ret void if.exit4: ; preds = %if.exit ret void }