Check that sret is only used on pointers to types

with a size, like byval.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46207 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands 2008-01-21 11:28:49 +00:00
parent 53d4afcee9
commit 333e8be5e8

View File

@ -202,8 +202,8 @@ uint16_t ParamAttr::typeIncompatible (const Type *Ty) {
if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) { if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
if (!PTy->getElementType()->isSized()) if (!PTy->getElementType()->isSized())
// The byval attribute only applies to pointers to types with a size. // The byval and sret attributes only apply to pointers to sized types.
Incompatible |= ParamAttr::ByVal; Incompatible |= ByVal | StructRet;
} else { } else {
// Attributes that only apply to pointers. // Attributes that only apply to pointers.
Incompatible |= ByVal | Nest | NoAlias | StructRet; Incompatible |= ByVal | Nest | NoAlias | StructRet;