From 012468aa7f03884270d831c6452cc50bf05f14f8 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 29 Jan 2009 08:24:57 +0000 Subject: ABI: When emitting calls which return an ignored argument, make sure to still return an RValue of the correct type. llvm-svn: 63294 --- clang/lib/CodeGen/CGCall.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'clang/lib/CodeGen/CGCall.cpp') diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index ee854f6ccee..6ffe8c328ca 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -1256,7 +1256,14 @@ RValue CodeGenFunction::EmitCall(llvm::Value *Callee, return RValue::get(RetTy->isVoidType() ? 0 : CI); case ABIArgInfo::Ignore: - return RValue::get(0); + if (RetTy->isVoidType()) + return RValue::get(0); + if (CodeGenFunction::hasAggregateLLVMType(RetTy)) { + llvm::Value *Res = + llvm::UndefValue::get(llvm::PointerType::getUnqual(ConvertType(RetTy))); + return RValue::getAggregate(Res); + } + return RValue::get(llvm::UndefValue::get(ConvertType(RetTy))); case ABIArgInfo::Coerce: { llvm::Value *V = CreateTempAlloca(ConvertType(RetTy), "coerce"); -- cgit v1.2.3