Fixed returned type from if-else
This commit is contained in:
@@ -339,8 +339,8 @@ llvm::Value *ModuleBuilder::valueForIfElse(shared_ptr<ExpressionIfElse> expressi
|
|||||||
|
|
||||||
// Then
|
// Then
|
||||||
builder->SetInsertPoint(thenBlock);
|
builder->SetInsertPoint(thenBlock);
|
||||||
llvm::Value *thenValue = valueForExpression(expression->getThenBlock()->getResultStatementExpression()->getExpression());
|
|
||||||
buildStatement(expression->getThenBlock()->getStatementBlock());
|
buildStatement(expression->getThenBlock()->getStatementBlock());
|
||||||
|
llvm::Value *thenValue = valueForExpression(expression->getThenBlock()->getResultStatementExpression()->getExpression());
|
||||||
builder->CreateBr(mergeBlock);
|
builder->CreateBr(mergeBlock);
|
||||||
thenBlock = builder->GetInsertBlock();
|
thenBlock = builder->GetInsertBlock();
|
||||||
|
|
||||||
@@ -350,8 +350,8 @@ llvm::Value *ModuleBuilder::valueForIfElse(shared_ptr<ExpressionIfElse> expressi
|
|||||||
llvm::Value *elseValue = nullptr;
|
llvm::Value *elseValue = nullptr;
|
||||||
if (expression->getElseBlock() != nullptr) {
|
if (expression->getElseBlock() != nullptr) {
|
||||||
valuesCount++;
|
valuesCount++;
|
||||||
elseValue = valueForExpression(expression->getElseBlock()->getResultStatementExpression()->getExpression());
|
|
||||||
buildStatement(expression->getElseBlock()->getStatementBlock());
|
buildStatement(expression->getElseBlock()->getStatementBlock());
|
||||||
|
elseValue = valueForExpression(expression->getElseBlock()->getResultStatementExpression()->getExpression());
|
||||||
}
|
}
|
||||||
builder->CreateBr(mergeBlock);
|
builder->CreateBr(mergeBlock);
|
||||||
elseBlock = builder->GetInsertBlock();
|
elseBlock = builder->GetInsertBlock();
|
||||||
@@ -359,12 +359,17 @@ llvm::Value *ModuleBuilder::valueForIfElse(shared_ptr<ExpressionIfElse> expressi
|
|||||||
// Merge
|
// Merge
|
||||||
fun->insert(fun->end(), mergeBlock);
|
fun->insert(fun->end(), mergeBlock);
|
||||||
builder->SetInsertPoint(mergeBlock);
|
builder->SetInsertPoint(mergeBlock);
|
||||||
llvm::PHINode *phi = builder->CreatePHI(typeForValueType(expression->getValueType()), valuesCount, "phii");
|
|
||||||
|
if (elseValue != nullptr && thenValue->getType() != elseValue->getType()) {
|
||||||
|
return llvm::UndefValue::get(typeVoid);
|
||||||
|
} else {
|
||||||
|
llvm::PHINode *phi = builder->CreatePHI(thenValue->getType(), valuesCount, "ifElseResult");
|
||||||
phi->addIncoming(thenValue, thenBlock);
|
phi->addIncoming(thenValue, thenBlock);
|
||||||
if (elseValue != nullptr)
|
if (elseValue != nullptr)
|
||||||
phi->addIncoming(elseValue, elseBlock);
|
phi->addIncoming(elseValue, elseBlock);
|
||||||
|
|
||||||
return phi;
|
return phi;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::Value *ModuleBuilder::valueForVar(shared_ptr<ExpressionVariable> expression) {
|
llvm::Value *ModuleBuilder::valueForVar(shared_ptr<ExpressionVariable> expression) {
|
||||||
|
|||||||
Reference in New Issue
Block a user