Browse Source

Improve `auto_cast` logic

gingerBill 4 years ago
parent
commit
ac53577e9b
2 changed files with 4 additions and 2 deletions
  1. 2 1
      src/ir.cpp
  2. 2 1
      src/llvm_backend.cpp

+ 2 - 1
src/ir.cpp

@@ -8257,7 +8257,8 @@ irValue *ir_build_expr_internal(irProcedure *proc, Ast *expr) {
 	case_end;
 	case_end;
 
 
 	case_ast_node(ac, AutoCast, expr);
 	case_ast_node(ac, AutoCast, expr);
-		return ir_build_expr(proc, ac->expr);
+		irValue *value = ir_build_expr(proc, ac->expr);
+		return ir_emit_conv(proc, value, tv.type);
 	case_end;
 	case_end;
 
 
 	case_ast_node(ue, UnaryExpr, expr);
 	case_ast_node(ue, UnaryExpr, expr);

+ 2 - 1
src/llvm_backend.cpp

@@ -11164,7 +11164,8 @@ lbValue lb_build_expr(lbProcedure *p, Ast *expr) {
 	case_end;
 	case_end;
 
 
 	case_ast_node(ac, AutoCast, expr);
 	case_ast_node(ac, AutoCast, expr);
-		return lb_build_expr(p, ac->expr);
+		lbValue value = lb_build_expr(p, ac->expr);
+		return lb_emit_conv(p, value, tv.type);
 	case_end;
 	case_end;
 
 
 	case_ast_node(ue, UnaryExpr, expr);
 	case_ast_node(ue, UnaryExpr, expr);