<div dir="ltr">Hi all,<div><br></div><div>Recently I have implemented a transformation pass based on LLVM3.5 and its function is to duplicate the function's argument list in a bytecode file and replace all use of original function with modified function. In LLVM3.5, the pass can work properly. However, when I tried to transplant the pass to LLVM3.9, the error "Argument value does not match function argument type!" occured.</div><div><br></div><div>The core snippet of my pass is as follows: 'func' denotes original function in a Module; 'new_return_type' denotes the duplicate of original function's return type; 'arg_types' denotes the duplicated argument type.</div><div>And I have analysed the cause of error "Argument value does not match function argument type!" and I can determine that the error APIs are mutateType()(3rd line)or getArgumentList().insertAfter()(10th line) between LLVM3.5 and LLVM3.9.</div><div><br></div><div>Anyone came across the same problem or knew the error API above? Thanks a lot!</div><div><br></div><div><div>1         unsigned address_space  = func->getType()-><wbr>getAddressSpace();</div><div>2        FunctionType *new_type = FunctionType::get(new_return_<wbr>type, arg_types, type->isVarArg(    ));</div><div>3         func->mutateType(PointerType:<wbr>:get(new_type, address_space));</div><div>4         //Duplicate arguments</div><div>5         std::vector<Argument *> arg_list;</div><div>6         for each_custom(arg, *func, arg_begin, arg_end)</div><div>7           arg_list.push_back(&*arg);</div><div>8         for each(arg, arg_list){</div><div>9           Argument *arg_dup = new Argument((*arg)->getType(), makeName(*arg, "_dup"));</div><div>10           func->getArgumentList().<wbr>insertAfter((*arg)-><wbr>getIterator(), arg_dup);</div><div>11        }</div></div><div><br></div><div><br></div><div><br></div></div>