[LLVMdev] StructType for dispatch_object_t changed by Linker
Duncan Sands
baldrick at free.fr
Fri Dec 14 01:43:41 PST 2012
Hi Jaymie,
...
> Step 2: %union.dispatch_object_t = type { %struct.dispatch_object_s* }
> Step 4: %union.dispatch_object_t = type { %struct.dispatch_object_s.1* }
>
> Code that reproduces the problem is at http://pastebin.com/pxveBUJa and
> http://pastebin.com/GDb9n9xA.
>
> A workaround is to call
> `StructType::create(mod->getContext(), "union.dispatch_object_t")` before doing
> Step 1.
>
> This sounds like what Chris was talking about in his blog post on the LLVM 3.0
> type system <http://blog.llvm.org/2011/11/llvm-30-type-system-rewrite.html>,
> "The Linker 'links' types and retypes IR objects".
exactly, this is where it is coming from.
Except that I would have
> expected the Linker to recognize that the `dispatch_object_t` type in the loaded
> module and the generated code are the same. Am I doing something wrong, or is
> this a bug in LLVM? (I have LLVM 3.1, Mac OS X 10.6.)
Probably the types are not defined precisely the same in each module (maybe you
could send the exact definitions in each module to the mailing list?), but I
think there were also some bugs in this area that were fixed in 3.2.
Ciao, Duncan.
More information about the llvm-dev
mailing list