[llvm-commits] [llvm-gcc-4.2] r130197 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Duncan Sands
baldrick at free.fr
Tue Apr 26 03:11:50 PDT 2011
Author: baldrick
Date: Tue Apr 26 05:11:50 2011
New Revision: 130197
URL: http://llvm.org/viewvc/llvm-project?rev=130197&view=rev
Log:
Port commit 129003 from dragonegg. This fixes the llvm-gcc build on some
platforms (PR9638).
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=130197&r1=130196&r2=130197&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Apr 26 05:11:50 2011
@@ -804,6 +804,9 @@
Value *E = Builder.CreateLoad(GEP, "mrv");
RetVals.push_back(E);
}
+ // If the return type specifies an empty struct then return one.
+ if (RetVals.empty())
+ RetVals.push_back(UndefValue::get(Fn->getReturnType()));
} else {
// Otherwise, this aggregate result must be something that is returned
// in a scalar register for this target. We must bit convert the
@@ -828,10 +831,9 @@
}
if (RetVals.empty())
Builder.CreateRetVoid();
- else if (!Fn->getReturnType()->isAggregateType()) {
- assert(RetVals.size() == 1 && "Non-aggregate return has multiple values!");
+ else if (RetVals.size() == 1 && RetVals[0]->getType() == Fn->getReturnType())
Builder.CreateRet(RetVals[0]);
- } else
+ else
Builder.CreateAggregateRet(RetVals.data(), RetVals.size());
// Emit pending exception handling code.
More information about the llvm-commits
mailing list