From 242d61d1c974e1c79f063a29fe8448d543f24cb1 Mon Sep 17 00:00:00 2001
From: Chris Lattner
+An "up reference" allows you to refer to a lexically enclosing type without +requiring it to have a name. For instance, a structure declaration may contain a +pointer to any of the types it is lexically a member of. Example of up +references (with their equivalent as named type declarations) include:
+ ++ { \2 * } %x = type { %t* } + { \2 }* %y = type { %y }* + \1* %z = type %z* ++ +
+An up reference is needed by the asmprinter for printing out cyclic types when +there is no declared name for a type in the cycle. Because the asmprinter does +not want to print out an infinite type string, it needs a syntax to handle +recursive types that have no names (all names are optional in llvm IR). +
+ ++ \<level> ++ +
+The level is the count of the lexical type that is being referred to. +
+ +\1* | +Self-referential pointer. | +
{ { \3*, i8 }, i32 } | +Recursive structure where the upref refers to the out-most + structure. | +