diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-03 13:05:10 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-03 13:05:10 +0900 |
| commit | 6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0 (patch) | |
| tree | bd17cff079ca359a5c47345ec2d6c143c64bcc93 | |
| parent | 22649829cd7b6d8f5e7b630167b1a928e5275f05 (diff) | |
| download | ducc-6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0.tar.gz ducc-6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0.tar.zst ducc-6e9ffa7cf08c83853e2fe84555d35eeaaf84e4f0.zip | |
fix: do not dereference function pointer
| -rw-r--r-- | src/codegen.c | 2 | ||||
| -rw-r--r-- | tests/functions.c | 3 |
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; |
