[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