Can anyone tell me where my blunder is in the following program?
llvm-as reports:
llvm-as: testit.ll:11: Can't store 'opaque *' into space of type 'opaque
*'!
Which doesn't seem to make sense to me. What is it that is illegal about
storing a pointer to opaque in a space that is of type pointer to
opaque? Is it just that you can't store pointers to opaque?
%path = internal constant [11 x sbyte] c"/some/path\00"
implementation ; Functions:
declare opaque* %open(sbyte*)
internal int %testme(int, sbyte**) {
%stdout = alloca opaque*
%pathp = getelementptr [11 x sbyte]* %path, uint 0, uint 0
%handle = call opaque* %open( sbyte* %pathp )
store opaque* %handle, opaque* %stdout ; This
is line 11
}
Can anyone tell me where my blunder is in the following program?
llvm-as reports:
llvm-as: testit.ll:11: Can't store 'opaque *' into space of type 'opaque
*'!
Which doesn't seem to make sense to me. What is it that is illegal about
storing a pointer to opaque in a space that is of type pointer to
opaque? Is it just that you can't store pointers to opaque?
The problem is that all instances of the string "opaque" are different types in .ll files. Try using something like:
%opaque1 = type opaque
%opaque2 = type opaque
at the top, then use %opaque1/%opaque2/.. whereever you need them (or use even better names). This way, each distinct opaque type is only "mentioned" once and you are explicit about which opaque type you are using.
-Chris
%path = internal constant [11 x sbyte] c"/some/path\00"
implementation ; Functions:
declare opaque* %open(sbyte*)
internal int %testme(int, sbyte**) {
%stdout = alloca opaque*
%pathp = getelementptr [11 x sbyte]* %path, uint 0, uint 0
%handle = call opaque* %open( sbyte* %pathp )
store opaque* %handle, opaque* %stdout ; This
is line 11
}