Skip to content

Commit

Permalink
aro_translate_c: handle opaque struct defs in prototypes
Browse files Browse the repository at this point in the history
  • Loading branch information
ehaas committed Jul 31, 2024
1 parent 93a502c commit b3f5769
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 11 deletions.
5 changes: 5 additions & 0 deletions lib/compiler/aro_translate_c.zig
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,11 @@ fn transRecordDecl(c: *Context, scope: *Scope, record_ty: Type) Error!void {

const is_pub = toplevel and !is_unnamed;
const init_node = blk: {
if (record_decl.isIncomplete()) {
try c.opaque_demotes.put(c.gpa, @intFromPtr(record_decl), {});
break :blk ZigTag.opaque_literal.init();
}

var fields = try std.ArrayList(ast.Payload.Record.Field).initCapacity(c.gpa, record_decl.fields.len);
defer fields.deinit();

Expand Down
10 changes: 10 additions & 0 deletions test/cases/translate_c/struct prototype used in func.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
struct Foo;
struct Foo *some_func(struct Foo *foo, int x);

// translate-c
// c_frontend=clang,aro
//
// pub const struct_Foo = opaque {};
// pub extern fn some_func(foo: ?*struct_Foo, x: c_int) ?*struct_Foo;
//
// pub const Foo = struct_Foo;
11 changes: 0 additions & 11 deletions test/translate_c.zig
Original file line number Diff line number Diff line change
Expand Up @@ -879,17 +879,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
\\pub const Foo = struct_Foo;
});

cases.add("struct prototype used in func",
\\struct Foo;
\\struct Foo *some_func(struct Foo *foo, int x);
, &[_][]const u8{
\\pub const struct_Foo = opaque {};
,
\\pub extern fn some_func(foo: ?*struct_Foo, x: c_int) ?*struct_Foo;
,
\\pub const Foo = struct_Foo;
});

cases.add("#define an unsigned integer literal",
\\#define CHANNEL_COUNT 24
, &[_][]const u8{
Expand Down

0 comments on commit b3f5769

Please sign in to comment.