aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-07-23 23:09:55 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-07-23 23:09:55 +0000
commit552d6405bf568da4ab5be88cfc4723b6e4e301d8 (patch)
tree6f181fdf00803f61c3a4eae57efee264bf528182
parentf99f3f4944bb8973899bffc52040c19bb31b6119 (diff)
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
-rw-r--r--lib/VMCore/Verifier.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index cbb34f09e4..6da36452fc 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<StructType>(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);
}
}