[LLVMdev] Resolving an opaque type in llvm-assembly

Rodney M. Bates rodney_bates at lcwb.coop
Tue Feb 24 06:58:25 PST 2015



On 02/23/2015 01:43 PM, Reid Kleckner wrote:
> In the textual form of LLVM IR, forward references are legal, so you shouldn't need this kind of redeclaration. You example could be:
> %TF = type i32 (%TO*)
> %TO = type %TF
>
> However, llvm-as rejects it with "error: forward references to non-struct type", but that's a different issue.
>

Thanks, that helps.  I am seeing some of this now by doing experiments with handwritten IR assembly.
It looks like I will have to artificially wrap some types in a one-member struct.

> On Sun, Feb 22, 2015 at 10:31 AM, Rodney M. Bates <rodney_bates at lcwb.coop <mailto:rodney_bates at lcwb.coop>> wrote:
>
>     According to the Assembly language reference: "In LLVM, opaque types can
>     eventually be resolved to any type (not just a structure type)."  But
>     the only way I can think of to do so is to give it a type name, then
>     later redeclare the name.  But that gives an error:
>
>     %TO = type opaque
>     %TF = type i32 ( %TO* )
>     %TO = type %TF
>
>     gives:
>
>     $ llvm-as types1.ll
>     llvm-as: types1.ll:3:1: error: redefinition of type
>     %TO = type %TF
>     ^
>
>     Also, what is the set of things that can be done with an as-yet unresolved
>     opaque type?
>
>
>
>     --
>     Rodney Bates
>     rodney.m.bates at acm.org <mailto:rodney.m.bates at acm.org>
>     _________________________________________________
>     LLVM Developers mailing list
>     LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
>     http://lists.cs.uiuc.edu/__mailman/listinfo/llvmdev <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>
>

-- 
Rodney Bates
rodney.m.bates at acm.org



More information about the llvm-dev mailing list