|
@@ -177,8 +177,9 @@ llvm::Value* ExpressionCodegenVisitor::visit(sem::FieldAccessExpression& access,
|
|
|
|
|
|
llvm::Value* target = access.target->accept(fg.lvalueVisitor, builder);
|
|
llvm::Value* target = access.target->accept(fg.lvalueVisitor, builder);
|
|
|
|
|
|
|
|
+ int structIndex = access.accessed->llvmStructIndex;
|
|
llvm::ArrayRef<Value*> indexList = {
|
|
llvm::ArrayRef<Value*> indexList = {
|
|
- llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, 0, false)),
|
|
+ llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, structIndex, false)),
|
|
llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, 0, false))
|
|
llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, 0, false))
|
|
};
|
|
};
|
|
Value* ptr = builder.CreateGEP(type, target, indexList);
|
|
Value* ptr = builder.CreateGEP(type, target, indexList);
|
|
@@ -267,8 +268,9 @@ llvm::Value* LValueVisitor::visit(sem::FieldAccessExpression& access, llvm::IRBu
|
|
|
|
|
|
llvm::Value* target = access.target->accept(*this, builder);
|
|
llvm::Value* target = access.target->accept(*this, builder);
|
|
|
|
|
|
|
|
+ int structIndex = access.accessed->llvmStructIndex;
|
|
llvm::ArrayRef<Value*> indexList = {
|
|
llvm::ArrayRef<Value*> indexList = {
|
|
- llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, 0, false)),
|
|
+ llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, structIndex, false)),
|
|
llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, 0, false))
|
|
llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, 0, false))
|
|
};
|
|
};
|
|
Value* ptr = builder.CreateGEP(type, target, indexList);
|
|
Value* ptr = builder.CreateGEP(type, target, indexList);
|