aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--main.c1
-rw-r--r--tests/054.sh23
2 files changed, 24 insertions, 0 deletions
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