From 82c99e92032b8101443671604de7137ba7257cd0 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 21 Jul 2025 07:12:03 +0900 Subject: fix: fix dereference of struct members --- main.c | 1 + tests/054.sh | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 tests/054.sh diff --git a/main.c b/main.c index ef19587..6b0ca3d 100644 --- a/main.c +++ b/main.c @@ -942,6 +942,7 @@ AstNode* ast_new_member_access_expr(AstNode* obj, const String* name) { AstNode* e = ast_new(AstNodeKind_deref_expr); e->node_operand = ast_new_binary_expr(TokenKind_plus, obj, ast_new_int(type_offsetof(obj->ty->to, name))); e->ty = type_member_typeof(obj->ty->to, name); + e->node_operand->ty = type_new_ptr(e->ty); return e; } diff --git a/tests/054.sh b/tests/054.sh new file mode 100644 index 0000000..06252b9 --- /dev/null +++ b/tests/054.sh @@ -0,0 +1,23 @@ +set -e + +cat <<'EOF' > expected +0 +1 +EOF +bash ../../test_diff.sh <<'EOF' +int printf(); +void* calloc(); + +struct S { + int a; + int b; +}; + +int main() { + struct S* s = calloc(1, sizeof(struct S)); + s->b = 1; + printf("%ld\n", s->a); + printf("%ld\n", s->b); + return 0; +} +EOF -- cgit v1.2.3-70-g09d2