|
@@ -41,6 +41,8 @@ public:
|
|
|
PrivateLinkage, ///< Like Internal, but omit from symbol table.
|
|
|
LinkerPrivateLinkage, ///< Like Private, but linker removes.
|
|
|
LinkerPrivateWeakLinkage, ///< Like LinkerPrivate, but weak.
|
|
|
+ LinkerPrivateWeakDefAutoLinkage, ///< Like LinkerPrivateWeak, but possibly
|
|
|
+ /// hidden.
|
|
|
DLLImportLinkage, ///< Function to be imported from DLL
|
|
|
DLLExportLinkage, ///< Function to be accessible from DLL.
|
|
|
ExternalWeakLinkage,///< ExternalWeak linkage description.
|
|
@@ -137,9 +139,13 @@ public:
|
|
|
static bool isLinkerPrivateWeakLinkage(LinkageTypes Linkage) {
|
|
|
return Linkage == LinkerPrivateWeakLinkage;
|
|
|
}
|
|
|
+ static bool isLinkerPrivateWeakDefAutoLinkage(LinkageTypes Linkage) {
|
|
|
+ return Linkage == LinkerPrivateWeakDefAutoLinkage;
|
|
|
+ }
|
|
|
static bool isLocalLinkage(LinkageTypes Linkage) {
|
|
|
return isInternalLinkage(Linkage) || isPrivateLinkage(Linkage) ||
|
|
|
- isLinkerPrivateLinkage(Linkage) || isLinkerPrivateWeakLinkage(Linkage);
|
|
|
+ isLinkerPrivateLinkage(Linkage) || isLinkerPrivateWeakLinkage(Linkage) ||
|
|
|
+ isLinkerPrivateWeakDefAutoLinkage(Linkage);
|
|
|
}
|
|
|
static bool isDLLImportLinkage(LinkageTypes Linkage) {
|
|
|
return Linkage == DLLImportLinkage;
|
|
@@ -158,24 +164,26 @@ public:
|
|
|
/// by something non-equivalent at link time. For example, if a function has
|
|
|
/// weak linkage then the code defining it may be replaced by different code.
|
|
|
static bool mayBeOverridden(LinkageTypes Linkage) {
|
|
|
- return (Linkage == WeakAnyLinkage ||
|
|
|
- Linkage == LinkOnceAnyLinkage ||
|
|
|
- Linkage == CommonLinkage ||
|
|
|
- Linkage == ExternalWeakLinkage ||
|
|
|
- Linkage == LinkerPrivateWeakLinkage);
|
|
|
+ return Linkage == WeakAnyLinkage ||
|
|
|
+ Linkage == LinkOnceAnyLinkage ||
|
|
|
+ Linkage == CommonLinkage ||
|
|
|
+ Linkage == ExternalWeakLinkage ||
|
|
|
+ Linkage == LinkerPrivateWeakLinkage ||
|
|
|
+ Linkage == LinkerPrivateWeakDefAutoLinkage;
|
|
|
}
|
|
|
|
|
|
/// isWeakForLinker - Whether the definition of this global may be replaced at
|
|
|
/// link time.
|
|
|
static bool isWeakForLinker(LinkageTypes Linkage) {
|
|
|
- return (Linkage == AvailableExternallyLinkage ||
|
|
|
- Linkage == WeakAnyLinkage ||
|
|
|
- Linkage == WeakODRLinkage ||
|
|
|
- Linkage == LinkOnceAnyLinkage ||
|
|
|
- Linkage == LinkOnceODRLinkage ||
|
|
|
- Linkage == CommonLinkage ||
|
|
|
- Linkage == ExternalWeakLinkage ||
|
|
|
- Linkage == LinkerPrivateWeakLinkage);
|
|
|
+ return Linkage == AvailableExternallyLinkage ||
|
|
|
+ Linkage == WeakAnyLinkage ||
|
|
|
+ Linkage == WeakODRLinkage ||
|
|
|
+ Linkage == LinkOnceAnyLinkage ||
|
|
|
+ Linkage == LinkOnceODRLinkage ||
|
|
|
+ Linkage == CommonLinkage ||
|
|
|
+ Linkage == ExternalWeakLinkage ||
|
|
|
+ Linkage == LinkerPrivateWeakLinkage ||
|
|
|
+ Linkage == LinkerPrivateWeakDefAutoLinkage;
|
|
|
}
|
|
|
|
|
|
bool hasExternalLinkage() const { return isExternalLinkage(Linkage); }
|
|
@@ -195,6 +203,9 @@ public:
|
|
|
bool hasLinkerPrivateWeakLinkage() const {
|
|
|
return isLinkerPrivateWeakLinkage(Linkage);
|
|
|
}
|
|
|
+ bool hasLinkerPrivateWeakDefAutoLinkage() const {
|
|
|
+ return isLinkerPrivateWeakDefAutoLinkage(Linkage);
|
|
|
+ }
|
|
|
bool hasLocalLinkage() const { return isLocalLinkage(Linkage); }
|
|
|
bool hasDLLImportLinkage() const { return isDLLImportLinkage(Linkage); }
|
|
|
bool hasDLLExportLinkage() const { return isDLLExportLinkage(Linkage); }
|