diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-07 15:33:59 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-07 17:37:23 +0900 |
| commit | f684a1f964d2761a4721497973023fa82923f121 (patch) | |
| tree | a52514e06aaf20b4f72c5b00dd241d48e535d582 | |
| parent | cdddf2422553f1f21c8d2c57cd382b8362dc80fb (diff) | |
| download | ducc-f684a1f964d2761a4721497973023fa82923f121.tar.gz ducc-f684a1f964d2761a4721497973023fa82923f121.tar.zst ducc-f684a1f964d2761a4721497973023fa82923f121.zip | |
feat: support null pointer in initializer
| -rw-r--r-- | src/parse.c | 4 | ||||
| -rw-r--r-- | tests/variables.c | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/parse.c b/src/parse.c index 9083ecc..b1a1d9b 100644 --- a/src/parse.c +++ b/src/parse.c @@ -2830,6 +2830,10 @@ static void do_eval_init_expr(InitData* buf, AstNode* expr, Type* ty) { initdata_append_addr(buf, expr->as.ref_expr->operand->as.gvar->name); } else if (expr->kind == AstNodeKind_gvar) { initdata_append_addr(buf, expr->as.gvar->name); + } else if (expr->kind == AstNodeKind_func) { + initdata_append_addr(buf, expr->as.func->name); + } else if (expr->kind == AstNodeKind_int_expr && expr->as.int_expr->value == 0) { + initdata_append_zeros(buf, type_sizeof(ty)); } else { unimplemented(); } diff --git a/tests/variables.c b/tests/variables.c index 2ba28d1..e6a0b3a 100644 --- a/tests/variables.c +++ b/tests/variables.c @@ -1,4 +1,5 @@ #include <helpers.h> +#include <stddef.h> int printf(const char*, ...); @@ -33,6 +34,7 @@ struct S2 { struct S2 arr5[] = { {"foo"}, {"bar"}, + {NULL}, }; int main() { @@ -74,6 +76,7 @@ int main() { ASSERT_EQ_STR("foo", arr5[0].x); ASSERT_EQ_STR("bar", arr5[1].x); + ASSERT_EQ(NULL, arr5[2].x); // local variables int foo; |
