Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CallInst::init(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr) {
- assert(NumOperands == Args.size() + 1 && "NumOperands not set up?");
- Op<-1>() = Func;
- #ifndef NDEBUG
- FunctionType *FTy =
- cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
- assert((Args.size() == FTy->getNumParams() ||
- (FTy->isVarArg() && Args.size() > FTy->getNumParams())) &&
- "Calling a function with bad signature (wrong number of arguments)!");
- for (unsigned i = 0; i != Args.size(); ++i)
- {
- if (i < FTy->getNumParams() && FTy->getParamType(i) != Args[i]->getType())
- {
- std::string s1;
- raw_string_ostream argType(s1);
- Args[i]->print(argType);
- std::string s2;
- raw_string_ostream paramType(s2);
- FTy->getParamType(i)->print(paramType);
- std::string msg = "Attempt to pass '";
- raw_string_ostream msgs(msg);
- msgs << argType.str() << "' to '" << paramType.str() << "' for parameter " << i;
- dbgs() << msgs.str() << '\n';
- }
- assert((i >= FTy->getNumParams() ||
- FTy->getParamType(i) == Args[i]->getType()) &&
- "Calling a function with a bad signature (mismatched argument type)!");
- }
- #endif
- std::copy(Args.begin(), Args.end(), op_begin());
- setName(NameStr);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement