if (ParentModule)
ParentModule->getFunctionList().push_back(this);
+
+ // Ensure intrinsics have the right parameter attributes.
+ if (unsigned IID = getIntrinsicID(true))
+ setParamAttrs(Intrinsic::getParamAttrs(Intrinsic::ID(IID)));
}
Function::~Function() {
unsigned numTys) {
// There can never be multiple globals with the same name of different types,
// because intrinsics must be a specific type.
- Function *F =
+ return
cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
getType(id, Tys, numTys)));
- F->setParamAttrs(getParamAttrs(id));
- return F;
}
Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
F->getName().substr(Name.length()) + "'. It should be '" +
Suffix + "'", F);
}
+
+ // Check parameter attributes.
+ Assert1(F->getParamAttrs() == Intrinsic::getParamAttrs(ID),
+ "Intrinsic has wrong parameter attributes!", F);
}