From: Reid Spencer Date: Mon, 23 Jul 2007 23:09:55 +0000 (+0000) Subject: Add better verification of attributes on function types. It is not permitted X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=552d6405bf568da4ab5be88cfc4723b6e4e301d8;p=oota-llvm.git Add better verification of attributes on function types. It is not permitted to use sret or inreg on the function. It is equally illegal to use noreturn or nounwind on a parameter; they only go with the function. This patch enforces these rules. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40453 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index cbb34f09e46..6da36452fcd 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -364,6 +364,10 @@ void Verifier::visitFunction(Function &F) { Assert(!Attrs->paramHasAttr(0, ParamAttr::ByVal), "Attribute ByVal should not apply to functions!"); + Assert(!Attrs->paramHasAttr(0, ParamAttr::StructRet), + "Attribute SRet should not apply to functions!"); + Assert(!Attrs->paramHasAttr(0, ParamAttr::InReg), + "Attribute SRet should not apply to functions!"); for (FunctionType::param_iterator I = FT->param_begin(), E = FT->param_end(); I != E; ++I, ++Idx) { @@ -386,6 +390,11 @@ void Verifier::visitFunction(Function &F) { Assert1(isa(Ty->getElementType()), "Attribute ByVal should only apply to pointer to structs!", &F); } + + if (Attrs->paramHasAttr(Idx, ParamAttr::NoReturn)) + Assert1(0, "Attribute NoReturn should only be applied to function", &F); + if (Attrs->paramHasAttr(Idx, ParamAttr::NoUnwind)) + Assert1(0, "Attribute NoUnwind should only be applied to function", &F); } }