[LLVMdev] use of CallInst()

Ryan M. Lefever
Wed, 07 Mar 2007 11:18:50 -0000

> Args needs to be an array of the arguments and NumArgs needs to be the
> size of the array. If you have a std::vector then you can just:
>
> new CallInst(F, &ArgVec[0], ArgVec.size(), ...)

Doesn't the code above make an assumption about how std::vector is
implemented?  If ArgVec is defined as

std::vector<Value*> ArgVec;

then &ArgVec[0] returns a Value**.  Let us define

Value** Params = &ArgVec[0];

The constructor for CallInst accesses Params using the [] operator in a
for loop.  That should only work if the std::vector<Value*> is
implemented using an array of Value*s.  I looked at the documentation
for STL and did not see anything about vector being guaranteed to be
implemented as an array.

Am I missing something?  If not, why was direct support for a
std:vector<Value*> removed from the CallInst constructor?

I apologize if I am misinterpreting things.