<div dir="ltr">Howdy Simone,<div><br></div><div>If my poor memory still serves me correctly, the NameStr parameter here is the name for the Value class that accepts the return value of the CallInst, not the name for the CallInst itself. So when the function of the CallInst is void, it's illegal to assign the return value to any names</div><div><br></div><div>Correct me if I'm wrong.</div><div><br></div><div>Also I do wish LLVM documentations could give more details on its function parameters. It could help newcomers a lot.</div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">Regards,</span></div><div>Kevin</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 1, 2016 at 4:24 PM Simone Atzeni via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Looks like I found the solution.<br>
<br>
When I call CallInst::Create, the param NameStr needs to be an empty string for void functions.<br>
<br>
I thought that value was the name of the function I want to call, but apparently is not.<br>
Why is that then?<br>
<br>
Thanks.<br>
Best,<br>
Simone<br>
<br>
> On Mar 1, 2016, at 13:51, Simone Atzeni <<a href="mailto:simone.at@gmail.com" target="_blank">simone.at@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> supposing I have a function “foo” like the following:<br>
><br>
> int foo(int a, int b) {<br>
><br>
> ...<br>
> ...<br>
> }<br>
><br>
> I want to insert int the LLVM IR a call instructions to a function “bar” that requires the same parameters of foo.<br>
> So my function foo will become:<br>
><br>
> int foo(int a, int b) {<br>
>  bar(a,b);<br>
>  …<br>
>  ...<br>
> }<br>
><br>
> I am using the following code:<br>
><br>
> bool ThreadSanitizer::runOnFunction(Function &F) {<br>
>    ValueToValueMapTy VMap;<br>
>    Function *new_function = CloneFunction(&F, VMap, false);<br>
>    new_function->setName(functionName + “_newfunction");<br>
>    F.getParent()->getFunctionList().push_back(new_function);<br>
><br>
>    Function::ArgumentListType::iterator it = F.getArgumentList().begin();<br>
>    Function::ArgumentListType::iterator end = F.getArgumentList().end();<br>
><br>
>    std::vector<Value*> args;<br>
>    while (it != end) {<br>
>      Argument *Args = &(*it);<br>
>      args.push_back(Args);<br>
>      it++;<br>
>    }<br>
><br>
>    CallInst::Create(new_function->getFunctionType(), new_function, args, functionName + "__swordomp__", &F.getEntryBlock().front());<br>
> }<br>
><br>
> but I am getting the following error:<br>
><br>
> void llvm::Value::setNameImpl(const llvm::Twine&): Assertion `!getType()->isVoidTy() && "Cannot assign a name to void values!"' failed.<br>
><br>
> How should I fix it?<br>
><br>
> Thanks.<br>
> Best,<br>
> Simone<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>