From 03531a4816c6b1a80322129d6f7c5d3ab06be7bf Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Mon, 21 Jan 2008 21:37:41 +0000 Subject: [PATCH] It turns out that in C++ it is legal to declare functions that return an opaque type by value, as long as you don't call it or provide a body (you can take the address of it). So it is wrong to insist that sret parameters not be an opaque*. And I guess it is really up to codegen to complain if someone tries to call such a function. I'm also removing the analogous check from byval parameters, since I don't see why we shouldn't allow them as long as no-one tries to call the function or give it a body. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46216 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/ParameterAttributes.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/VMCore/ParameterAttributes.cpp b/lib/VMCore/ParameterAttributes.cpp index 0cafd307b2f..b099c8fed86 100644 --- a/lib/VMCore/ParameterAttributes.cpp +++ b/lib/VMCore/ParameterAttributes.cpp @@ -200,14 +200,9 @@ uint16_t ParamAttr::typeIncompatible (const Type *Ty) { // Attributes that only apply to integers. Incompatible |= SExt | ZExt; - if (const PointerType *PTy = dyn_cast(Ty)) { - if (!PTy->getElementType()->isSized()) - // The byval and sret attributes only apply to pointers to sized types. - Incompatible |= ByVal | StructRet; - } else { + if (!isa(Ty)) // Attributes that only apply to pointers. Incompatible |= ByVal | Nest | NoAlias | StructRet; - } return Incompatible; }