[LLVMdev] creating and inserting a function with variable arguments

Akshay Jain jivan.molu at gmail.com
Tue Apr 16 06:34:15 PDT 2013


The code that I have written to get the function type is:

const std::vector<Type *> ParamTys;
ParamTys.push_back(IntegerType::getInt32Ty(Context));
ParamTys.push_back(IntegerType::getInt32Ty(Context));
ParamTys.push_back(IntegerType::getInt32Ty(Context));
ParamTys.push_back(PointerType::get(Type::getVoidTy(Context), 0));
ParamTys.push_back(PointerType::get(Type::getVoidTy(Context), 0));

FunctionType *ftype = FunctionType::get(Type::getVoidTy(Context), ParamTys,
true);

And the errors are:

/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp: In member
function ‘virtual bool {anonymous}::Hello2::runOnFunction(llvm::Function&)’:
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:108:62:
error: no matching function for call to
‘std::vector<llvm::Type*>::push_back(const llvm::IntegerType*) const’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:108:62: note:
candidate is:
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note: void std::vector<_Tp,
_Alloc>::push_back(const value_type&) [with _Tp = llvm::Type*, _Alloc =
std::allocator<llvm::Type*>, std::vector<_Tp, _Alloc>::value_type =
llvm::Type*] <near match>
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note:   no known conversion
for argument 1 from ‘const llvm::IntegerType*’ to ‘llvm::Type* const&’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:109:62:
error: no matching function for call to
‘std::vector<llvm::Type*>::push_back(const llvm::IntegerType*) const’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:109:62: note:
candidate is:
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note: void std::vector<_Tp,
_Alloc>::push_back(const value_type&) [with _Tp = llvm::Type*, _Alloc =
std::allocator<llvm::Type*>, std::vector<_Tp, _Alloc>::value_type =
llvm::Type*] <near match>
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note:   no known conversion
for argument 1 from ‘const llvm::IntegerType*’ to ‘llvm::Type* const&’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:110:62:
error: no matching function for call to
‘std::vector<llvm::Type*>::push_back(const llvm::IntegerType*) const’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:110:62: note:
candidate is:
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note: void std::vector<_Tp,
_Alloc>::push_back(const value_type&) [with _Tp = llvm::Type*, _Alloc =
std::allocator<llvm::Type*>, std::vector<_Tp, _Alloc>::value_type =
llvm::Type*] <near match>
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note:   no known conversion
for argument 1 from ‘const llvm::IntegerType*’ to ‘llvm::Type* const&’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:111:75:
error: no matching function for call to
‘std::vector<llvm::Type*>::push_back(llvm::PointerType*) const’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:111:75: note:
candidate is:
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note: void std::vector<_Tp,
_Alloc>::push_back(const value_type&) [with _Tp = llvm::Type*, _Alloc =
std::allocator<llvm::Type*>, std::vector<_Tp, _Alloc>::value_type =
llvm::Type*] <near match>
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note:   no known conversion
for implicit ‘this’ parameter from ‘const std::vector<llvm::Type*>*’ to
‘std::vector<llvm::Type*>*’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:112:75:
error: no matching function for call to
‘std::vector<llvm::Type*>::push_back(llvm::PointerType*) const’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:112:75: note:
candidate is:
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note: void std::vector<_Tp,
_Alloc>::push_back(const value_type&) [with _Tp = llvm::Type*, _Alloc =
std::allocator<llvm::Type*>, std::vector<_Tp, _Alloc>::value_type =
llvm::Type*] <near match>
/usr/include/c++/4.6/bits/stl_vector.h:826:7: note:   no known conversion
for implicit ‘this’ parameter from ‘const std::vector<llvm::Type*>*’ to
‘std::vector<llvm::Type*>*’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:114:91:
error: no matching function for call to ‘llvm::FunctionType::get(const
llvm::Type*, const std::vector<llvm::Type*>&, bool)’
/home/akshay/llvm/llvm-2.9/lib/Transforms/AliasPass/pass2.cpp:114:91: note:
candidates are:
/home/akshay/llvm/llvm-2.9/include/llvm/DerivedTypes.h:157:24: note: static
llvm::FunctionType* llvm::FunctionType::get(const llvm::Type*, const
std::vector<const llvm::Type*>&, bool)
/home/akshay/llvm/llvm-2.9/include/llvm/DerivedTypes.h:157:24: note:   no
known conversion for argument 2 from ‘const std::vector<llvm::Type*>’ to
‘const std::vector<const llvm::Type*>&’


It may be a silly mistake, but I am quite new to c and c++ coding
especially in llvm. So I will be very grateful if you can help out.


On Tue, Apr 16, 2013 at 3:41 PM, Óscar Fuentes <ofv at wanadoo.es> wrote:

> Akshay Jain <jivan.molu at gmail.com> writes:
>
> > I have tried it, but I always end up with some kind of error. Can you
> > explain how can I get a function type for function which returns void
> > (nothing) and it's arguments are (int, int, int, void *, void *, ...) ??
>
> Instead of getting something to cut&paste, you would be much more
> enriched if the problematic code and the resulting errors were shown for
> examination.
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



-- 
*Akshay Jain
*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130416/fafbb0b8/attachment.html>


More information about the llvm-dev mailing list