aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-03 13:05:10 +0900
committernsfisis <nsfisis@gmail.com>2026-05-03 13:05:10 +0900
commit6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0 (patch)
treebd17cff079ca359a5c47345ec2d6c143c64bcc93
parent22649829cd7b6d8f5e7b630167b1a928e5275f05 (diff)
downloadducc-6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0.tar.gz
ducc-6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0.tar.zst
ducc-6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0.zip
fix: do not dereference function pointer
-rw-r--r--src/codegen.c2
-rw-r--r--tests/functions.c3
2 files changed, 4 insertions, 1 deletions
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;