[LLVMdev] initializer does not match global variable type.

Chris Lattner sabre at nondot.org
Tue Oct 17 17:02:56 PDT 2006


On Tue, 17 Oct 2006, Anderson, Todd A wrote:
> Making this change removed the error statements that I was initially
> receiving.  However, I thought that if you compiled the output of
> llvm2cpp
> and ran it you should get the same output as if you compiled and
> ran the objective-c file directly.

No.  llvm2cpp turns an llvm module into the C++ code that will produce the 
module, it doesn't turn it into C++ code that represents the program.

> Instead, I still get the following when I try to run the compiled C++ 
> file.  Is there some sort of option or step in the process I'm missing?

You want the C backend as I mentioned before.

Try:

llc -march=c x.bc -o x.c
gcc x.c
./a.out

That will run x.bc (assuming you don't need any libraries to link against, 
etc).

-chris

> ; ModuleID = 'bar.bc'
> target endian = little
> target pointersize = 32
> target triple = "i686-pc-linux-gnu"
> deplibs = [ "objc", "c", "crtend" ]
> 	%struct._objc_module = type { int, int, sbyte*,
> %struct._objc_symtab* }
> 	%struct._objc_selector = type { sbyte*, sbyte* }
> 	%struct._objc_symtab = type { int, %struct._objc_selector**,
> short, short, [2 x sbyte*] }
> 	%struct.objc_class = type { %struct.objc_class*,
> %struct.objc_class*, sbyte*, int, uint, int, %struct.objc_ivar_list*,
> %struct.objc_method_list*, %struct.sarray*, %struct.objc_class*,
> %struct.objc_class*, %struct.objc_protocol_list*, sbyte* }
> 	%struct.objc_ivar_list = type opaque
> 	%struct.objc_method_list = type opaque
> 	%struct.objc_object = type { %struct.objc_class* }
> 	%struct.objc_protocol_list = type opaque
> 	%struct.sarray = type opaque
> %llvm.global_ctors = appending global [1 x { int, void ()* }] [ { int,
> void ()* } { int 65535, void ()* %_GLOBAL__I_main } ]		; <[1 x
> { int, void ()* }]*> [#uses=0]
> %.str_2 = internal constant [13 x sbyte] c"Hello world\0A\00"
> ; <[13 x sbyte]*> [#uses=1]
> %.str_3 = internal constant [9 x sbyte] c"Fraction\00"		; <[9 x
> sbyte]*> [#uses=1]
> %.str_4 = internal constant [2 x sbyte] c"\0A\00"		; <[2 x
> sbyte]*> [#uses=1]
> %_OBJC_SELECTOR_TABLE = internal global [6 x %struct._objc_selector]
> zeroinitializer		; <[6 x %struct._objc_selector]*> [#uses=5]
> %_OBJC_MODULES = internal global %struct._objc_module zeroinitializer
> ; <%struct._objc_module*> [#uses=1]
> %__objc_class_name_Fraction = constant uint 0		; <uint*>
> [#uses=0]
>
> implementation   ; Functions:
>
> declare int %printf(sbyte*, ...)
>
> declare %struct.objc_object* %objc_get_class(sbyte*)
>
> int %main(int %argc, sbyte** %argv) {
> entry:
> 	tail call void %__main( )
> 	%tmp.0 = tail call int (sbyte*, ...)* %printf( sbyte*
> getelementptr ([13 x sbyte]* %.str_2, int 0, int 0) )		; <int>
> [#uses=0]
> 	%tmp.5 = tail call %struct.objc_object* %objc_get_class( sbyte*
> getelementptr ([9 x sbyte]* %.str_3, int 0, int 0) )		;
> <%struct.objc_object*> [#uses=2]
> 	%tmp.3 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* (%struct.objc_object*,
> %struct._objc_selector*)* %objc_msg_lookup( %struct.objc_object* %tmp.5,
> %struct._objc_selector* getelementptr ([6 x %struct._objc_selector]*
> %_OBJC_SELECTOR_TABLE, int 0, int 0) )		; <%struct.objc_object*
> (%struct.objc_object*, %struct._objc_selector*, ...)*> [#uses=1]
> 	%tmp.10 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* %tmp.3( %struct.objc_object* %tmp.5,
> %struct._objc_selector* getelementptr ([6 x %struct._objc_selector]*
> %_OBJC_SELECTOR_TABLE, int 0, int 0) )		; <%struct.objc_object*>
> [#uses=2]
> 	%tmp.2 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* (%struct.objc_object*,
> %struct._objc_selector*)* %objc_msg_lookup( %struct.objc_object*
> %tmp.10, %struct._objc_selector* getelementptr ([6 x
> %struct._objc_selector]* %_OBJC_SELECTOR_TABLE, int 0, int 1) )
> ; <%struct.objc_object* (%struct.objc_object*, %struct._objc_selector*,
> ...)*> [#uses=1]
> 	%tmp.16 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* %tmp.2( %struct.objc_object* %tmp.10,
> %struct._objc_selector* getelementptr ([6 x %struct._objc_selector]*
> %_OBJC_SELECTOR_TABLE, int 0, int 1) )		; <%struct.objc_object*>
> [#uses=6]
> 	%tmp.20 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* (%struct.objc_object*,
> %struct._objc_selector*)* %objc_msg_lookup( %struct.objc_object*
> %tmp.16, %struct._objc_selector* getelementptr ([6 x
> %struct._objc_selector]* %_OBJC_SELECTOR_TABLE, int 0, int 2) )
> ; <%struct.objc_object* (%struct.objc_object*, %struct._objc_selector*,
> ...)*> [#uses=1]
> 	tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* %tmp.20( %struct.objc_object* %tmp.16,
> %struct._objc_selector* getelementptr ([6 x %struct._objc_selector]*
> %_OBJC_SELECTOR_TABLE, int 0, int 2), int 1 )		;
> <%struct.objc_object*>:0 [#uses=0]
> 	%tmp.29 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* (%struct.objc_object*,
> %struct._objc_selector*)* %objc_msg_lookup( %struct.objc_object*
> %tmp.16, %struct._objc_selector* getelementptr ([6 x
> %struct._objc_selector]* %_OBJC_SELECTOR_TABLE, int 0, int 3) )
> ; <%struct.objc_object* (%struct.objc_object*, %struct._objc_selector*,
> ...)*> [#uses=1]
> 	tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* %tmp.29( %struct.objc_object* %tmp.16,
> %struct._objc_selector* getelementptr ([6 x %struct._objc_selector]*
> %_OBJC_SELECTOR_TABLE, int 0, int 3), int 3 )		;
> <%struct.objc_object*>:1 [#uses=0]
> 	%tmp.38 = tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* (%struct.objc_object*,
> %struct._objc_selector*)* %objc_msg_lookup( %struct.objc_object*
> %tmp.16, %struct._objc_selector* getelementptr ([6 x
> %struct._objc_selector]* %_OBJC_SELECTOR_TABLE, int 0, int 4) )
> ; <%struct.objc_object* (%struct.objc_object*, %struct._objc_selector*,
> ...)*> [#uses=1]
> 	tail call %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* %tmp.38( %struct.objc_object* %tmp.16,
> %struct._objc_selector* getelementptr ([6 x %struct._objc_selector]*
> %_OBJC_SELECTOR_TABLE, int 0, int 4) )		;
> <%struct.objc_object*>:2 [#uses=0]
> 	%tmp.47 = tail call int (sbyte*, ...)* %printf( sbyte*
> getelementptr ([2 x sbyte]* %.str_4, int 0, int 0) )		; <int>
> [#uses=0]
> 	ret int 0
> }
>
> declare void %__main()
>
> declare %struct.objc_object* (%struct.objc_object*,
> %struct._objc_selector*, ...)* %objc_msg_lookup(%struct.objc_object*,
> %struct._objc_selector*)
>
> internal void %_GLOBAL__I_main() {
> entry:
> 	tail call void %__objc_exec_class( sbyte* cast
> (%struct._objc_module* %_OBJC_MODULES to sbyte*) )
> 	ret void
> }
>
> declare void %__objc_exec_class(sbyte*)
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list