/// @brief An enumeration for the kinds of linkage for global values.
enum LinkageTypes {
ExternalLinkage = 0,///< Externally visible function
+ AvailableExternallyLinkage, ///< Available for inspection, not emission.
LinkOnceAnyLinkage, ///< Keep one copy of function when linking (inline)
LinkOnceODRLinkage, ///< Same, but only replaced by something equivalent.
WeakAnyLinkage, ///< Keep one copy of named function when linking (weak)
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.
}
VisibilityTypes getVisibility() const { return VisibilityTypes(Visibility); }
+ bool hasDefaultVisibility() const { return Visibility == DefaultVisibility; }
bool hasHiddenVisibility() const { return Visibility == HiddenVisibility; }
bool hasProtectedVisibility() const {
return Visibility == ProtectedVisibility;
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 hasAvailableExternallyLinkage() const {
+ return Linkage == AvailableExternallyLinkage;
+ }
bool hasLinkOnceLinkage() const {
return Linkage == LinkOnceAnyLinkage || Linkage == LinkOnceODRLinkage;
}
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);
}
/// isWeakForLinker - Whether the definition of this global may be replaced at
- /// link time, whether the replacement is equivalent to the original or not.
+ /// link time.
bool isWeakForLinker() const {
- return (Linkage == WeakAnyLinkage ||
+ return (Linkage == AvailableExternallyLinkage ||
+ Linkage == WeakAnyLinkage ||
Linkage == WeakODRLinkage ||
Linkage == LinkOnceAnyLinkage ||
Linkage == LinkOnceODRLinkage ||
- Linkage == CommonAnyLinkage ||
- Linkage == CommonODRLinkage ||
+ Linkage == CommonLinkage ||
Linkage == ExternalWeakLinkage);
}