diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 4001137..9a67446 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -610,6 +610,10 @@ ir::Value* IRGenImpl::GetLValAddress(SysYParser::LValContext* ctx) { } if (!indices.empty()) { + if (base_ptr->GetType() && base_ptr->GetType()->IsPointer() && + base_ptr->GetType()->GetElementType()->IsPointer()) { + base_ptr = builder_.CreateLoad(base_ptr, module_.GetContext().NextTemp()); + } return builder_.CreateGep(base_ptr, std::move(indices), module_.GetContext().NextTemp()); }