Might be missing the noalias attribute on the result?
On Thu, Jun 17, 2021 at 10:46 AM zealain via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hello
>
> I am trying to insert malloc calls in my function pass, yet it keeps
> complaining about the parameter type:
>
> Call parameter type does not match function signature!
> i64 4096
> i8* %malloccall = tail call i8* @malloc(i64 4096)
>
> Comparing this to a call generated by simply having a malloc in the C
> code, I cannot spot significant differences. The following (generated by
> clang) works just fine:
>
> %2 = call noalias i8* @malloc(i64 4096) #2
>
> Why does one work but the other doesn't? Below is the code I use to
> generate the instruction:
>
> Type *int8Type =
Type::getInt8Ty(this->currentFunction->getContext());
> Type *int64Type =
Type::getInt64Ty(this->currentFunction->getContext());
>
> auto allocSize = ConstantInt::get(int64Type, 4096);
>
> Instruction* mallocInstr >
CallInst::CreateMalloc(this->currentFunction->getEntryBlock().getFirstNonPHI(),
>
> int8Type->getPointerTo(), int8Type, allocSize,
> nullptr, nullptr,
"");
>
> I tried changing up the types already but didn't find a combination
that
> works yet. Any hints would be appreciated.
>
> Regards,
> Z
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20210617/78a46b63/attachment.html>