From 78a7bb108ad9f7bf59061675bcae8947d65afc3a Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Mon, 24 Oct 2022 14:46:14 +0300 Subject: [PATCH] llvm: handle namespace like packed structs Closes #13159 Closes #13188 --- src/codegen/llvm.zig | 2 +- test/behavior.zig | 1 + test/behavior/bugs/13159.zig | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 test/behavior/bugs/13159.zig diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index d4a94d1308..18b89eef78 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -1916,7 +1916,7 @@ pub const Object = struct { if (ty.castTag(.@"struct")) |payload| { const struct_obj = payload.data; - if (struct_obj.layout == .Packed) { + if (struct_obj.layout == .Packed and struct_obj.haveFieldTypes()) { const info = struct_obj.backing_int_ty.intInfo(target); const dwarf_encoding: c_uint = switch (info.signedness) { .signed => DW.ATE.signed, diff --git a/test/behavior.zig b/test/behavior.zig index 2f5d752087..442b27c09f 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -109,6 +109,7 @@ test { _ = @import("behavior/bugs/13128.zig"); _ = @import("behavior/bugs/13164.zig"); _ = @import("behavior/bugs/13171.zig"); + _ = @import("behavior/bugs/13159.zig"); _ = @import("behavior/byteswap.zig"); _ = @import("behavior/byval_arg_var.zig"); _ = @import("behavior/call.zig"); diff --git a/test/behavior/bugs/13159.zig b/test/behavior/bugs/13159.zig new file mode 100644 index 0000000000..6119c498a9 --- /dev/null +++ b/test/behavior/bugs/13159.zig @@ -0,0 +1,14 @@ +const std = @import("std"); +const expect = std.testing.expect; + +const Bar = packed struct { + const Baz = enum { + fizz, + buzz, + }; +}; + +test { + var foo = Bar.Baz.fizz; + try expect(foo == .fizz); +}