Add comment.
[oota-llvm.git] / lib / VMCore / Verifier.cpp
index 427b95b36dae37252645adbb007531117ae95b23..e86c89bfa82766e6a794d75ec8c98e5ab9a3064f 100644 (file)
@@ -576,14 +576,22 @@ void Verifier::visitTerminatorInst(TerminatorInst &I) {
 
 void Verifier::visitReturnInst(ReturnInst &RI) {
   Function *F = RI.getParent()->getParent();
-  if (RI.getNumOperands() == 0)
+  unsigned N = RI.getNumOperands();
+  if (N == 0) 
     Assert2(F->getReturnType() == Type::VoidTy,
             "Found return instr that returns void in Function of non-void "
             "return type!", &RI, F->getReturnType());
-  else
+  else if (N == 1)
     Assert2(F->getReturnType() == RI.getOperand(0)->getType(),
             "Function return type does not match operand "
             "type of return inst!", &RI, F->getReturnType());
+  else if (const StructType *STy = dyn_cast<StructType>(F->getReturnType())) {
+    for (unsigned i = 0; i < N; i++)
+      Assert2(STy->getElementType(i) == RI.getOperand(i)->getType(),
+              "Function return type does not match operand "
+              "type of return inst!", &RI, F->getReturnType());
+  } else
+    Assert1(0, "Invalid return type!", &RI);
 
   // Check to make sure that the return value has necessary properties for
   // terminators...