// Conversions
//===--------------------------------------------------------------------===//
-/// EmitConversion - Convert the value specied by Val, whose type is ValTy, to
-/// the type specified by DstTy, following the rules of C99 6.3.
-RValue CodeGenFunction::EmitConversion(RValue Val, QualType ValTy,
- QualType DstTy) {
- ValTy = ValTy.getCanonicalType();
- DstTy = DstTy.getCanonicalType();
- if (ValTy == DstTy) return Val;
-
- // Handle conversions to bool first, they are special: comparisons against 0.
- if (const BuiltinType *DestBT = dyn_cast<BuiltinType>(DstTy))
- if (DestBT->getKind() == BuiltinType::Bool)
- return RValue::get(ConvertScalarValueToBool(Val, ValTy));
-
- if (Val.isScalar() && !hasAggregateLLVMType(DstTy))
- return RValue::get(EmitScalarConversion(Val.getVal(), ValTy, DstTy));
-
-
- assert(0 && "FIXME: We don't support complex conversions yet!");
-}
-
-
/// ConvertScalarValueToBool - Convert the specified expression value to a
/// boolean (i1) truth value. This is equivalent to "Val == 0".
llvm::Value *CodeGenFunction::ConvertScalarValueToBool(RValue Val, QualType Ty){
// If the destination is void, just evaluate the source.
if (DestTy->isVoidType()) return 0;
-
- // FIXME: Refactor EmitConversion to not return an RValue. Sink it into this
- // method.
- return CGF.EmitConversion(Src, E->getType(), DestTy).getVal();
+
+ assert(0 && "Can't convert from an aggregate yet!");
}
//===----------------------------------------------------------------------===//
// Conversions
//===--------------------------------------------------------------------===//
- /// EmitConversion - Convert the value specied by Val, whose type is ValTy, to
- /// the type specified by DstTy, following the rules of C99 6.3.
- RValue EmitConversion(RValue Val, QualType ValTy, QualType DstTy);
-
/// ConvertScalarValueToBool - Convert the specified expression value to a
/// boolean (i1) truth value. This is equivalent to "Val == 0".
llvm::Value *ConvertScalarValueToBool(RValue Val, QualType Ty);