diff options
| author | Evan Haas <evan@lagerdata.com> | 2021-05-07 10:23:43 -0700 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2021-05-23 15:42:36 +0300 |
| commit | d321a4b765b94818c4a483a784bb6fc9048c64ba (patch) | |
| tree | 80bfd36c642e7e175525b6b952c2c6142c9ca1ec | |
| parent | e8236551abdb7bb74811e5e9dc9890cb2abbd269 (diff) | |
| download | zig-d321a4b765b94818c4a483a784bb6fc9048c64ba.tar.gz zig-d321a4b765b94818c4a483a784bb6fc9048c64ba.zip | |
translate-c: Translate FnDecl's that appear within functions
| -rw-r--r-- | src/translate_c.zig | 3 | ||||
| -rw-r--r-- | test/translate_c.zig | 12 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/translate_c.zig b/src/translate_c.zig index 546a110c15..715ce73d45 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -1682,6 +1682,9 @@ fn transDeclStmtOne( .Enum => { try transEnumDecl(c, scope, @ptrCast(*const clang.EnumDecl, decl)); }, + .Function => { + try visitFnDecl(c, @ptrCast(*const clang.FunctionDecl, decl)); + }, else => |kind| return fail( c, error.UnsupportedTranslation, diff --git a/test/translate_c.zig b/test/translate_c.zig index 798dab075b..286c54a8f6 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -3529,4 +3529,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\warning: unable to translate function, demoted to extern \\pub extern fn initialize() void; }); + + cases.add("Function prototype declared within function", + \\int foo(void) { + \\ extern int bar(int, int); + \\ return bar(1, 2); + \\} + , &[_][]const u8{ + \\pub extern fn bar(c_int, c_int) c_int; + \\pub export fn foo() c_int { + \\ return bar(@as(c_int, 1), @as(c_int, 2)); + \\} + }); } |
