Check that sret is only used on pointers to types
authorDuncan Sands <baldrick@free.fr>
Mon, 21 Jan 2008 11:28:49 +0000 (11:28 +0000)
committerDuncan Sands <baldrick@free.fr>
Mon, 21 Jan 2008 11:28:49 +0000 (11:28 +0000)
with a size, like byval.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46207 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/ParameterAttributes.cpp

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