<div dir="ltr">Hi, I encountered an issue when attempting to create a call to function malloc.<div>I just want to do a simple thing, suppose there is a variable p, if p is a pointer</div><div>then allocate memory to p.</div><div>Source code:</div><div>int *p;</div><div>p = (int *) malloc(sizeof(*p));</div><div><br></div><div>Try to generate LLVM IR for it:</div><div>Type *tp = p->getType();</div><div>AllocaInst* arg_alloc = builder.CreateAlloca(tp);//builder is IRBuilder<br></div><div>if(tp->isPointerTy()){</div><div>    Type* tpp = tp->getPointerElementType();<br></div><div>    Type* ITy = Type::getInt32Ty(getGlobalContext());</div><div><div><span style="white-space:pre">    </span>Constant* AllocSize = ConstantExpr::getSizeOf(tpp)</div><div><span style="white-space:pre">    </span>AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);</div></div><div>    CallInst::CreateMalloc(arg_alloc, ITy, tpp, AllocSize);<br></div><div>}</div><div>But the generated LLVM IR seems incorrect:</div><div>%malloccall = tail call i8* bitcast (i8* (i64)* @malloc to i8* (i32)*)(i32 ptrtoint (i32* getelementptr (i32* null, i32 1) to i32))<br></div><div><br></div><div>I don't quite understand the arguments of the function  CallInst::CreateMalloc.</div><div>Is the second argument  type of p and the third one  type of the element</div><div>that p points to?  </div><div>The size of an integer variable is 4, but if I pass 4 as the last argument to   CallInst::CreateMalloc, then an assertion failure will occur. </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Dingbao Xie<br></div></div></div>
</div></div>