Illegal BitCast assertion failed

Hi there,

I’m having a bit of a problem while trying to create BitCast instructions.
Well, first, I have some very generic functions written in C, for which I would like to make calls on another C file I’m playing with using an LLVM Pass. The simplified signature of two of these functions can be seen below:

void write(void* data, unsigned b); // write b bytes starting, at address “data”, to an internal queue
void* read(unsigned b); // read and return b bytes from an internal queue

Since I would like to be able to use variables of any type as arguments for these two functions, I thought I could create a BitCastInst, in order to cast a pointer from any type to void*, and then back, and insert it before calling write, or after calling read. And so I did like the example below

// Let Func be an llvm::Function* that represents read, CArgs contain an integer constant, and
// typeInFrontOfTheStream be an llvm::Type* that represents the type of the variable
// available as the next read from the stream

llvm::CallInst *consume = llvm::CallInst::Create(Func, CArgs);

llvm::BitCastInst *cbi = new llvm::BitCastInst(consume, typeInFrontOfTheStream->getPointerTo());

For the first example when running this pass, the typeInFrontOfTheStream is an i1, which means the result of typeInFrontOfTheStream->getPointerTo() is an i1*. Remember that consume is a function that returns void*, which is seen in LLVMIR as i8*. And, for a first execution like that, I’m getting

Assertion failed: (castIsValid(getOpcode(), S, Ty) && “Illegal BitCast”), function BitCastInst, file /Developer/llvm/lib/IR/Instructions.cpp, line 2842.

Does anyone have any suggestion about what I’m doing wrong?

Thanks in advance,