From 6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 3 May 2026 13:05:10 +0900 Subject: fix: do not dereference function pointer --- src/codegen.c | 2 +- tests/functions.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index 7f85fbd..2da6851 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -102,7 +102,7 @@ static void codegen_ref_expr(CodeGen* g, RefExprNode* expr) { } static void codegen_lval2rval(CodeGen* g, Type* ty) { - if (ty->kind == TypeKind_array) { + if (ty->kind == TypeKind_array || ty->kind == TypeKind_func) { return; } diff --git a/tests/functions.c b/tests/functions.c index 4911d7c..f9f25cb 100644 --- a/tests/functions.c +++ b/tests/functions.c @@ -168,8 +168,11 @@ int main() { int (*fp1)() = f10; ASSERT_EQ(12345, fp1()); + ASSERT_EQ(12345, (*fp1)()); + ASSERT_EQ(12345, (**fp1)()); int (*fp2)(int, int, int, int, int, int) = f; ASSERT_EQ(1, fp2(1, 2, 3, 4, 5, 6)); + ASSERT_EQ(1, (*fp2)(1, 2, 3, 4, 5, 6)); int (*fp3)(int, int, int, int, int, int) = f6; ASSERT_EQ(6, fp3(1, 2, 3, 4, 5, 6)); int (*fp4)(int, int, int, int, int, int, int, int, int, int, int) = f7; -- cgit v1.3.1