Changeset View
Changeset View
Standalone View
Standalone View
cfe/trunk/lib/CodeGen/CGExprAgg.cpp
Show First 20 Lines • Show All 705 Lines • ▼ Show 20 Lines | case CK_ToUnion: { | ||||
QualType Ty = E->getSubExpr()->getType(); | QualType Ty = E->getSubExpr()->getType(); | ||||
Address CastPtr = | Address CastPtr = | ||||
Builder.CreateElementBitCast(Dest.getAddress(), CGF.ConvertType(Ty)); | Builder.CreateElementBitCast(Dest.getAddress(), CGF.ConvertType(Ty)); | ||||
EmitInitializationToLValue(E->getSubExpr(), | EmitInitializationToLValue(E->getSubExpr(), | ||||
CGF.MakeAddrLValue(CastPtr, Ty)); | CGF.MakeAddrLValue(CastPtr, Ty)); | ||||
break; | break; | ||||
} | } | ||||
case CK_LValueToRValueBitCast: { | |||||
if (Dest.isIgnored()) { | |||||
CGF.EmitAnyExpr(E->getSubExpr(), AggValueSlot::ignored(), | |||||
/*ignoreResult=*/true); | |||||
break; | |||||
} | |||||
LValue SourceLV = CGF.EmitLValue(E->getSubExpr()); | |||||
Address SourceAddress = | |||||
Builder.CreateElementBitCast(SourceLV.getAddress(), CGF.Int8Ty); | |||||
Address DestAddress = | |||||
Builder.CreateElementBitCast(Dest.getAddress(), CGF.Int8Ty); | |||||
llvm::Value *SizeVal = llvm::ConstantInt::get( | |||||
CGF.SizeTy, | |||||
CGF.getContext().getTypeSizeInChars(E->getType()).getQuantity()); | |||||
Builder.CreateMemCpy(DestAddress, SourceAddress, SizeVal); | |||||
break; | |||||
} | |||||
case CK_DerivedToBase: | case CK_DerivedToBase: | ||||
case CK_BaseToDerived: | case CK_BaseToDerived: | ||||
case CK_UncheckedDerivedToBase: { | case CK_UncheckedDerivedToBase: { | ||||
llvm_unreachable("cannot perform hierarchy conversion in EmitAggExpr: " | llvm_unreachable("cannot perform hierarchy conversion in EmitAggExpr: " | ||||
"should have been unpacked before we got here"); | "should have been unpacked before we got here"); | ||||
} | } | ||||
case CK_NonAtomicToAtomic: | case CK_NonAtomicToAtomic: | ||||
▲ Show 20 Lines • Show All 1,280 Lines • Show Last 20 Lines |