From d321a4b765b94818c4a483a784bb6fc9048c64ba Mon Sep 17 00:00:00 2001 From: Evan Haas Date: Fri, 7 May 2021 10:23:43 -0700 Subject: [PATCH] translate-c: Translate FnDecl's that appear within functions --- src/translate_c.zig | 3 +++ test/translate_c.zig | 12 ++++++++++++ 2 files changed, 15 insertions(+) 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)); + \\} + }); }