Commit c7884af063
Changed files (3)
src/translate_c.zig
@@ -1166,6 +1166,10 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_decl: *const clang.RecordD
});
}
+ if (!c.zig_is_stage1 and is_packed) {
+ return failDecl(c, record_loc, bare_name, "cannot translate packed record union", .{});
+ }
+
const record_payload = try c.arena.create(ast.Payload.Record);
record_payload.* = .{
.base = .{ .tag = ([2]Tag{ .@"struct", .@"union" })[@boolToInt(is_union)] },
test/run_translated_c.zig
@@ -250,18 +250,20 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void {
\\}
, "");
- cases.add("struct initializer - packed",
- \\#define _NO_CRT_STDIO_INLINE 1
- \\#include <stdint.h>
- \\#include <stdlib.h>
- \\struct s {uint8_t x,y;
- \\ uint32_t z;} __attribute__((packed)) s0 = {1, 2};
- \\int main() {
- \\ /* sizeof nor offsetof currently supported */
- \\ if (((intptr_t)&s0.z - (intptr_t)&s0.x) != 2) abort();
- \\ return 0;
- \\}
- , "");
+ if (@import("builtin").zig_backend == .stage1) {
+ cases.add("struct initializer - packed",
+ \\#define _NO_CRT_STDIO_INLINE 1
+ \\#include <stdint.h>
+ \\#include <stdlib.h>
+ \\struct s {uint8_t x,y;
+ \\ uint32_t z;} __attribute__((packed)) s0 = {1, 2};
+ \\int main() {
+ \\ /* sizeof nor offsetof currently supported */
+ \\ if (((intptr_t)&s0.z - (intptr_t)&s0.x) != 2) abort();
+ \\ return 0;
+ \\}
+ , "");
+ }
cases.add("cast signed array index to unsigned",
\\#include <stdlib.h>
test/translate_c.zig
@@ -728,20 +728,22 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
\\}
});
- cases.add("struct initializer - packed",
- \\struct {int x,y,z;} __attribute__((packed)) s0 = {1, 2};
- , &[_][]const u8{
- \\const struct_unnamed_1 = packed struct {
- \\ x: c_int,
- \\ y: c_int,
- \\ z: c_int,
- \\};
- \\pub export var s0: struct_unnamed_1 = struct_unnamed_1{
- \\ .x = @as(c_int, 1),
- \\ .y = @as(c_int, 2),
- \\ .z = 0,
- \\};
- });
+ if (builtin.zig_backend == .stage1) {
+ cases.add("struct initializer - packed",
+ \\struct {int x,y,z;} __attribute__((packed)) s0 = {1, 2};
+ , &[_][]const u8{
+ \\const struct_unnamed_1 = packed struct {
+ \\ x: c_int,
+ \\ y: c_int,
+ \\ z: c_int,
+ \\};
+ \\pub export var s0: struct_unnamed_1 = struct_unnamed_1{
+ \\ .x = @as(c_int, 1),
+ \\ .y = @as(c_int, 2),
+ \\ .z = 0,
+ \\};
+ });
+ }
// Test case temporarily disabled:
// https://github.com/ziglang/zig/issues/12055