aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Haas <evan@lagerdata.com>2021-05-07 10:23:43 -0700
committerVeikka Tuominen <git@vexu.eu>2021-05-23 15:42:36 +0300
commitd321a4b765b94818c4a483a784bb6fc9048c64ba (patch)
tree80bfd36c642e7e175525b6b952c2c6142c9ca1ec
parente8236551abdb7bb74811e5e9dc9890cb2abbd269 (diff)
downloadzig-d321a4b765b94818c4a483a784bb6fc9048c64ba.tar.gz
zig-d321a4b765b94818c4a483a784bb6fc9048c64ba.zip
translate-c: Translate FnDecl's that appear within functions
-rw-r--r--src/translate_c.zig3
-rw-r--r--test/translate_c.zig12
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));
+ \\}
+ });
}