Fix how pointer indexing works

This commit is contained in:
Sofia 2026-04-16 19:23:29 +03:00
parent 6dad36e34a
commit f9208a525d
2 changed files with 7 additions and 14 deletions

View File

@ -267,20 +267,13 @@ namespace AST {
auto ptr_ty = dynamic_cast<types::PointerType*>(value.ty.get()); auto ptr_ty = dynamic_cast<types::PointerType*>(value.ty.get());
auto gep_value = builder.builder->CreateGEP(ptr_ty->m_inner->codegen(builder, scope.structs), value.value, idx_list, "GEP"); auto gep_value = builder.builder->CreateGEP(ptr_ty->m_inner->codegen(builder, scope.structs), value.value, idx_list, "GEP");
if (scope.is_lvalue) {
return codegen::StackValue{
gep_value,
value.ty,
};
}
else {
auto loaded = value.ty->load(builder, gep_value, scope.structs); auto loaded = value.ty->load(builder, gep_value, scope.structs);
return codegen::StackValue{ return codegen::StackValue{
loaded.first, loaded.first,
loaded.second loaded.second
}; };
} }
}
else if (value.ty->m_kind == types::TypeKind::Array) { else if (value.ty->m_kind == types::TypeKind::Array) {
auto array_ty = dynamic_cast<types::ArrayType*>(value.ty.get()); auto array_ty = dynamic_cast<types::ArrayType*>(value.ty.get());
if (array_ty->m_raw) { if (array_ty->m_raw) {

2
test.c
View File

@ -6,7 +6,7 @@ int fibonacci(int n) {
return fibonacci(n - 1) + fibonacci(n - 2); return fibonacci(n - 1) + fibonacci(n - 2);
} }
void change_first(char otus[5]) { void change_first(char otus[]) {
otus[0] = 115; otus[0] = 115;
} }