diff options
-rw-r--r-- | docs/LangRef.html | 10 | ||||
-rw-r--r-- | lib/VMCore/Type.cpp | 24 |
2 files changed, 10 insertions, 24 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index 935625dbfa..6f5fbb3f35 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -1592,7 +1592,7 @@ Classifications</a> </div> <h5>Syntax:</h5> <pre> - <returntype list> (<parameter list>) + <returntype> (<parameter list>) </pre> <p>...where '<tt><parameter list></tt>' is a comma-separated list of type @@ -1600,8 +1600,8 @@ Classifications</a> </div> which indicates that the function takes a variable number of arguments. Variable argument functions can access their arguments with the <a href="#int_varargs">variable argument handling intrinsic</a> - functions. '<tt><returntype list></tt>' is a comma-separated list of - <a href="#t_firstclass">first class</a> type specifiers.</p> + functions. '<tt><returntype></tt>' is a any type except + <a href="#t_label">label</a> and <a href="#t_metadata">metadata</a>.</p> <h5>Examples:</h5> <table class="layout"> @@ -1626,8 +1626,8 @@ Classifications</a> </div> </td> </tr><tr class="layout"> <td class="left"><tt>{i32, i32} (i32)</tt></td> - <td class="left">A function taking an <tt>i32</tt>, returning two - <tt>i32</tt> values as an aggregate of type <tt>{ i32, i32 }</tt> + <td class="left">A function taking an <tt>i32</tt>, returning a + <a href="#t_struct">structure</a> containing two <tt>i32</tt> values </td> </tr> </table> diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index 0883cc304b..da53800ad7 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -365,25 +365,11 @@ const IntegerType *Type::getInt64Ty(LLVMContext &C) { /// isValidReturnType - Return true if the specified type is valid as a return /// type. bool FunctionType::isValidReturnType(const Type *RetTy) { - if (RetTy->isFirstClassType()) { - if (const PointerType *PTy = dyn_cast<PointerType>(RetTy)) - return PTy->getElementType()->getTypeID() != MetadataTyID; - return true; - } - if (RetTy->getTypeID() == VoidTyID || RetTy->getTypeID() == MetadataTyID || - isa<OpaqueType>(RetTy)) - return true; - - // If this is a multiple return case, verify that each return is a first class - // value and that there is at least one value. - const StructType *SRetTy = dyn_cast<StructType>(RetTy); - if (SRetTy == 0 || SRetTy->getNumElements() == 0) - return false; - - for (unsigned i = 0, e = SRetTy->getNumElements(); i != e; ++i) - if (!SRetTy->getElementType(i)->isFirstClassType()) - return false; - return true; + if (const PointerType *PTy = dyn_cast<PointerType>(RetTy)) + return PTy->getElementType()->getTypeID() != MetadataTyID; + + return RetTy->getTypeID() != LabelTyID && + RetTy->getTypeID() != MetadataTyID; } /// isValidArgumentType - Return true if the specified type is valid as an |