Akshay Jain
2013-Apr-16 09:41 UTC
[LLVMdev] creating and inserting a function with variable arguments
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 *, ...) ?? Thanks in advance. On Tue, Apr 16, 2013 at 7:22 AM, Óscar Fuentes <ofv at wanadoo.es> wrote:> Akshay Jain <jivan.molu at gmail.com> writes: > > > I am working on a pass in which I need to define and insert a function > with > > variable arguments. Can I do it with the help of getOrInsertFunction()? > > Sure. There is an overload of getOrInsertFunction that takes a > FunctionType, and there are FunctionType::get static methods where you > say if the function type takes a variable number of arguments. See the > doxygen documentation for FunctionType and Module::getOrInsertFunction. > > _______________________________________________ > 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/ea348371/attachment.html>
Óscar Fuentes
2013-Apr-16 10:11 UTC
[LLVMdev] creating and inserting a function with variable arguments
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.
Akshay Jain
2013-Apr-16 13:34 UTC
[LLVMdev] creating and inserting a function with variable arguments
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>