aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/GlobalValue.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-13 05:44:34 +0000
committerChris Lattner <sabre@nondot.org>2009-04-13 05:44:34 +0000
commit266c7bbbbcc4b326dea82e577de1a415d6acc23e (patch)
treee880304f13d90f5926ead058f546b05e325dd5a2 /include/llvm/GlobalValue.h
parent2c71b8f64f571b34e8df2a83120a2e889627b8d4 (diff)
downloadexternal_llvm-266c7bbbbcc4b326dea82e577de1a415d6acc23e.tar.gz
external_llvm-266c7bbbbcc4b326dea82e577de1a415d6acc23e.tar.bz2
external_llvm-266c7bbbbcc4b326dea82e577de1a415d6acc23e.zip
Add a new "available_externally" linkage type. This is intended
to support C99 inline, GNU extern inline, etc. Related bugzilla's include PR3517, PR3100, & PR2933. Nothing uses this yet, but it appears to work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68940 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/GlobalValue.h')
-rw-r--r--include/llvm/GlobalValue.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/include/llvm/GlobalValue.h b/include/llvm/GlobalValue.h
index e6a82ef22e..50c613ef6a 100644
--- a/include/llvm/GlobalValue.h
+++ b/include/llvm/GlobalValue.h
@@ -31,6 +31,7 @@ public:
/// @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)
@@ -109,6 +110,9 @@ public:
}
bool hasExternalLinkage() const { return Linkage == ExternalLinkage; }
+ bool hasAvailableExternallyLinkage() const {
+ return Linkage == AvailableExternallyLinkage;
+ }
bool hasLinkOnceLinkage() const {
return Linkage == LinkOnceAnyLinkage || Linkage == LinkOnceODRLinkage;
}
@@ -119,7 +123,8 @@ public:
bool hasInternalLinkage() const { return Linkage == InternalLinkage; }
bool hasPrivateLinkage() const { return Linkage == PrivateLinkage; }
bool hasLocalLinkage() const {
- return Linkage == InternalLinkage || Linkage == PrivateLinkage;
+ return Linkage == InternalLinkage || Linkage == PrivateLinkage ||
+ Linkage == AvailableExternallyLinkage;
}
bool hasDLLImportLinkage() const { return Linkage == DLLImportLinkage; }
bool hasDLLExportLinkage() const { return Linkage == DLLExportLinkage; }
@@ -141,9 +146,10 @@ public:
}
/// 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 ||