LangRef: Remove stale docs on LLVM types in module structure

The distinction between "identified" and "literal" struct types is fully
documented in a later section.

Patch by Philip Reames!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202927 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Kleckner 2014-03-05 02:21:50 +00:00
parent e6d0bedb06
commit d6e0bca951

View File

@ -471,31 +471,22 @@ DLL storage class:
exists for defining a dll interface, the compiler, assembler and linker know exists for defining a dll interface, the compiler, assembler and linker know
it is externally referenced and must refrain from deleting the symbol. it is externally referenced and must refrain from deleting the symbol.
Named Types Structure Types
----------- ---------------
LLVM IR allows you to specify name aliases for certain types. This can LLVM IR allows you to specify both "identified" and "literal" :ref:`structure
make it easier to read the IR and make the IR more condensed types <t_struct>`. Literal types are uniqued structurally, but identified types
(particularly when recursive types are involved). An example of a name are never uniqued. An :ref:`opaque structural type <t_opaque>` can also be used
specification is: to forward declare a type which is not yet available.
An example of a identified structure specification is:
.. code-block:: llvm .. code-block:: llvm
%mytype = type { %mytype*, i32 } %mytype = type { %mytype*, i32 }
You may give a name to any :ref:`type <typesystem>` except Prior to the LLVM 3.0 release, identified types were structurally uniqued. Only
":ref:`void <t_void>`". Type name aliases may be used anywhere a type is literal types are uniqued in recent versions of LLVM.
expected with the syntax "%mytype".
Note that type names are aliases for the structural type that they
indicate, and that you can therefore specify multiple names for the same
type. This often leads to confusing behavior when dumping out a .ll
file. Since LLVM IR uses structural typing, the name is not part of the
type. When printing out LLVM IR, the printer will pick *one name* to
render all types of a particular shape. This means that if you have code
where two different source types end up having the same LLVM type, that
the dumper will sometimes print the "wrong" or unexpected type. This is
an important design point and isn't going to change.
.. _globalvars: .. _globalvars: