</dd>
<dt><tt><b><a name="linkage_linkonce">linkonce_odr</a></b></tt>: </dt>
- <dt><tt><b><a name="linkage_common">common_odr</a></b></tt>: </dt>
<dt><tt><b><a name="linkage_weak">weak_odr</a></b></tt>: </dt>
<dd>Some languages allow inequivalent globals to be merged, such as two
functions with different semantics. Other languages, such as <tt>C++</tt>,
ensure that only equivalent globals are ever merged (the "one definition
- rule" - <tt>odr</tt>). Such languages can use the <tt>linkonce_odr</tt>,
- <tt>common_odr</tt> and <tt>weak_odr</tt> linkage types to indicate that
- the global will only be merged with equivalent globals. These linkage
- types are otherwise the same as their non-<tt>odr</tt> versions.
+ rule" - <tt>odr</tt>). Such languages can use the <tt>linkonce_odr</tt>
+ and <tt>weak_odr</tt> linkage types to indicate that the global will only
+ be merged with equivalent globals. These linkage types are otherwise the
+ same as their non-<tt>odr</tt> versions.
</dd>
<dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>
LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
LLVMGhostLinkage, /**< Stand-in functions for streaming fns from
bitcode */
- LLVMCommonAnyLinkage, /**< Tentative definitions */
- LLVMCommonODRLinkage /**< Same, but only replaced by something
- equivalent. */
+ LLVMCommonLinkage /**< Tentative definitions */
} LLVMLinkage;
typedef enum {
DLLExportLinkage, ///< Function to be accessible from DLL
ExternalWeakLinkage,///< ExternalWeak linkage description
GhostLinkage, ///< Stand-in functions for streaming fns from BC files
- CommonAnyLinkage, ///< Tentative definitions
- CommonODRLinkage ///< Same, but only replaced by something equivalent.
+ CommonLinkage ///< Tentative definitions
};
/// @brief An enumeration for the kinds of visibility of global values.
static LinkageTypes getWeakLinkage(bool ODR) {
return ODR ? WeakODRLinkage : WeakAnyLinkage;
}
- static LinkageTypes getCommonLinkage(bool ODR) {
- return ODR ? CommonODRLinkage : CommonAnyLinkage;
- }
bool hasExternalLinkage() const { return Linkage == ExternalLinkage; }
bool hasLinkOnceLinkage() const {
bool hasDLLExportLinkage() const { return Linkage == DLLExportLinkage; }
bool hasExternalWeakLinkage() const { return Linkage == ExternalWeakLinkage; }
bool hasGhostLinkage() const { return Linkage == GhostLinkage; }
- bool hasCommonLinkage() const {
- return Linkage == CommonAnyLinkage || Linkage == CommonODRLinkage;
- }
+ bool hasCommonLinkage() const { return Linkage == CommonLinkage; }
void setLinkage(LinkageTypes LT) { Linkage = LT; }
LinkageTypes getLinkage() const { return Linkage; }
bool mayBeOverridden() const {
return (Linkage == WeakAnyLinkage ||
Linkage == LinkOnceAnyLinkage ||
- Linkage == CommonAnyLinkage ||
+ Linkage == CommonLinkage ||
Linkage == ExternalWeakLinkage);
}
Linkage == WeakODRLinkage ||
Linkage == LinkOnceAnyLinkage ||
Linkage == LinkOnceODRLinkage ||
- Linkage == CommonAnyLinkage ||
- Linkage == CommonODRLinkage ||
+ Linkage == CommonLinkage ||
Linkage == ExternalWeakLinkage);
}
KEYWORD(dllimport);
KEYWORD(dllexport);
KEYWORD(common);
- KEYWORD(common_odr);
KEYWORD(default);
KEYWORD(hidden);
KEYWORD(protected);
case lltok::kw_appending: // OptionalLinkage
case lltok::kw_dllexport: // OptionalLinkage
case lltok::kw_common: // OptionalLinkage
- case lltok::kw_common_odr: // OptionalLinkage
case lltok::kw_dllimport: // OptionalLinkage
case lltok::kw_extern_weak: // OptionalLinkage
case lltok::kw_external: { // OptionalLinkage
/// ::= 'appending'
/// ::= 'dllexport'
/// ::= 'common'
-/// ::= 'common_odr'
/// ::= 'dllimport'
/// ::= 'extern_weak'
/// ::= 'external'
case lltok::kw_linkonce_odr: Res = GlobalValue::LinkOnceODRLinkage; break;
case lltok::kw_appending: Res = GlobalValue::AppendingLinkage; break;
case lltok::kw_dllexport: Res = GlobalValue::DLLExportLinkage; break;
- case lltok::kw_common: Res = GlobalValue::CommonAnyLinkage; break;
- case lltok::kw_common_odr: Res = GlobalValue::CommonODRLinkage; break;
+ case lltok::kw_common: Res = GlobalValue::CommonLinkage; break;
case lltok::kw_dllimport: Res = GlobalValue::DLLImportLinkage; break;
case lltok::kw_extern_weak: Res = GlobalValue::ExternalWeakLinkage; break;
case lltok::kw_external: Res = GlobalValue::ExternalLinkage; break;
break;
case GlobalValue::AppendingLinkage:
case GlobalValue::GhostLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
return Error(LinkageLoc, "invalid function linkage type");
}
kw_global, kw_constant,
kw_private, kw_internal, kw_linkonce, kw_linkonce_odr, kw_weak, kw_weak_odr,
- kw_appending, kw_dllimport, kw_dllexport, kw_common, kw_common_odr,
+ kw_appending, kw_dllimport, kw_dllexport, kw_common,
kw_default, kw_hidden, kw_protected,
kw_extern_weak,
kw_external, kw_thread_local,
case 5: return GlobalValue::DLLImportLinkage;
case 6: return GlobalValue::DLLExportLinkage;
case 7: return GlobalValue::ExternalWeakLinkage;
- case 8: return GlobalValue::CommonAnyLinkage;
+ case 8: return GlobalValue::CommonLinkage;
case 9: return GlobalValue::PrivateLinkage;
case 10: return GlobalValue::WeakODRLinkage;
case 11: return GlobalValue::LinkOnceODRLinkage;
- case 13: return GlobalValue::CommonODRLinkage;
}
}
case GlobalValue::DLLImportLinkage: return 5;
case GlobalValue::DLLExportLinkage: return 6;
case GlobalValue::ExternalWeakLinkage: return 7;
- case GlobalValue::CommonAnyLinkage: return 8;
+ case GlobalValue::CommonLinkage: return 8;
case GlobalValue::PrivateLinkage: return 9;
case GlobalValue::WeakODRLinkage: return 10;
case GlobalValue::LinkOnceODRLinkage: return 11;
- case GlobalValue::CommonODRLinkage: return 13;
}
}
case GlobalValue::WeakODRLinkage:
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
assert(!isa<Function>(gv) && "Unexpected linkage type for Function!");
case GlobalValue::ExternalLinkage:
GVName = TAI->getGlobalPrefix() + name;
SwitchToSection(TAI->SectionForGlobal(GVar));
switch (GVar->getLinkage()) {
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
O << TAI->getWeakRefDirective() << name << '\n';
break;
case GlobalValue::AppendingLinkage:
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
O << "\t.global " << name << '\n'
<< "\t.type " << name << ", @object\n"
<< "\t.weak " << name << '\n';
Out << "GlobalValue::ExternalWeakLinkage"; break;
case GlobalValue::GhostLinkage:
Out << "GlobalValue::GhostLinkage"; break;
- case GlobalValue::CommonAnyLinkage:
- Out << "GlobalValue::CommonAnyLinkage"; break;
- case GlobalValue::CommonODRLinkage:
- Out << "GlobalValue::CommonODRLinkage"; break;
+ case GlobalValue::CommonLinkage:
+ Out << "GlobalValue::CommonLinkage"; break;
}
}
switch (GVar->getLinkage()) {
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
// Nonnull linkonce -> weak
switch (GVar->getLinkage()) {
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
// FIXME: Verify correct for weak.
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
O << "\t.global " << name << '\n'
<< "\t.type " << name << ", @object\n"
<< "\t.weak " << name << '\n';
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
O << "\t.globl " << name << '\n'
<< "\t.weak_definition " << name << '\n';
break;
}
switch (GVar->getLinkage()) {
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage: // FIXME: Verify correct for weak.
}
switch (GVar->getLinkage()) {
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
bool bCustomSegment = false;
switch (I->getLinkage()) {
- case GlobalValue::CommonAnyLinkage:
- case GlobalValue::CommonODRLinkage:
+ case GlobalValue::CommonLinkage:
case GlobalValue::LinkOnceAnyLinkage:
case GlobalValue::LinkOnceODRLinkage:
case GlobalValue::WeakAnyLinkage:
case GlobalValue::LinkOnceODRLinkage: Out << "linkonce_odr "; break;
case GlobalValue::WeakAnyLinkage: Out << "weak "; break;
case GlobalValue::WeakODRLinkage: Out << "weak_odr "; break;
- case GlobalValue::CommonAnyLinkage: Out << "common "; break;
- case GlobalValue::CommonODRLinkage: Out << "common_odr "; break;
+ case GlobalValue::CommonLinkage: Out << "common "; break;
case GlobalValue::AppendingLinkage: Out << "appending "; break;
case GlobalValue::DLLImportLinkage: Out << "dllimport "; break;
case GlobalValue::DLLExportLinkage: Out << "dllexport "; break;
| appending
| dllexport
| common
- | "common_odr"
;
GVExternalLinkage
syn keyword llvmKeyword define declare global constant
syn keyword llvmKeyword internal external
syn keyword llvmKeyword linkonce linkonce_odr weak weak_odr appending
-syn keyword llvmKeyword common common_odr extern_weak
+syn keyword llvmKeyword common extern_weak
syn keyword llvmKeyword thread_local dllimport dllexport
syn keyword llvmKeyword hidden protected default
syn keyword llvmKeyword except deplibs