Fix a bug handling function -> pointer decay and avoid emitting a noop

bitcast.

llvm-svn: 40992
This commit is contained in:
Chris Lattner
2007-08-10 16:33:59 +00:00
parent 0b1af29f28
commit 02697701d9

View File

@@ -91,6 +91,9 @@ RValue CodeGenFunction::EmitConversion(RValue Val, QualType ValTy,
if (isa<PointerType>(DstTy)) {
const llvm::Type *DestTy = ConvertType(DstTy);
if (Val.getVal()->getType() == DestTy)
return Val;
// The source value may be an integer, or a pointer.
assert(Val.isScalar() && "Can only convert from integer or pointer");
if (isa<llvm::PointerType>(Val.getVal()->getType()))
@@ -260,8 +263,6 @@ LValue CodeGenFunction::EmitLValue(const Expr *E) {
/// this method emits the address of the lvalue, then loads the result as an
/// rvalue, returning the rvalue.
RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
ExprType = ExprType.getCanonicalType();
if (LV.isSimple()) {
llvm::Value *Ptr = LV.getAddress();
const llvm::Type *EltTy =
@@ -271,6 +272,9 @@ RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
if (EltTy->isFirstClassType())
return RValue::get(Builder.CreateLoad(Ptr, "tmp"));
if (ExprType->isFunctionType())
return RValue::get(Ptr);
// Otherwise, we have an aggregate lvalue.
return RValue::getAggregate(Ptr);
}