diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-08-05 05:21:07 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-08-05 05:21:07 +0000 |
| commit | d055488c7210469be370fa8b4d3102bb9854c784 (patch) | |
| tree | 1558020b7662205780f724b4c9733a61b2ba5f62 /llvm/docs/LangRef.html | |
| parent | f49573d1eedcf1e44893d5a062ac1b72c8419646 (diff) | |
| download | bcm5719-llvm-d055488c7210469be370fa8b4d3102bb9854c784.tar.gz bcm5719-llvm-d055488c7210469be370fa8b4d3102bb9854c784.zip | |
Clarify common linkage and the requirements on it. Enforce
them in the verifier.
llvm-svn: 78160
Diffstat (limited to 'llvm/docs/LangRef.html')
| -rw-r--r-- | llvm/docs/LangRef.html | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/llvm/docs/LangRef.html b/llvm/docs/LangRef.html index 33fc7d4ff6c..52ec97888d1 100644 --- a/llvm/docs/LangRef.html +++ b/llvm/docs/LangRef.html @@ -552,19 +552,22 @@ define i32 @main() { <i>; i32()* </ translation unit that uses it. Unreferenced <tt>linkonce</tt> globals are allowed to be discarded.</dd> + <dt><tt><b><a name="linkage_weak">weak</a></b></tt>: </dt> + <dd>"<tt>weak</tt>" linkage has the same merging semantics as + <tt>linkonce</tt> linkage, except that unreferenced globals with + <tt>weak</tt> linkage may not be discarded. This is used for globals that + are declared "weak" in C source code.</dd> + <dt><tt><b><a name="linkage_common">common</a></b></tt>: </dt> - <dd>"<tt>common</tt>" linkage is exactly the same as <tt>linkonce</tt> - linkage, except that unreferenced <tt>common</tt> globals may not be - discarded. This is used for globals that may be emitted in multiple - translation units, but that are not guaranteed to be emitted into every - translation unit that uses them. One example of this is tentative - definitions in C, such as "<tt>int X;</tt>" at global scope.</dd> + <dd>"<tt>common</tt>" linkage is most similar to "<tt>weak</tt>" linkage, but + they are used for tentative definitions in C, such as "<tt>int X;</tt>" at + global scope. + Symbols with "<tt>common</tt>" linkage are merged in the same way as + <tt>weak symbols</tt>, and they may not be deleted if unreferenced. + Further, <tt>common</tt> symbols may not have an explicit section, and + must have a zero initializer. Functions and aliases may not have common + linkage.</dd> - <dt><tt><b><a name="linkage_weak">weak</a></b></tt>: </dt> - <dd>"<tt>weak</tt>" linkage is the same as <tt>common</tt> linkage, except - that some targets may choose to emit different assembly sequences for them - for target-dependent reasons. This is used for globals that are declared - "weak" in C source code.</dd> <dt><tt><b><a name="linkage_appending">appending</a></b></tt>: </dt> <dd>"<tt>appending</tt>" linkage may only be applied to global variables of |

