diff options
author | Chris Lattner <sabre@nondot.org> | 2009-04-13 05:44:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-04-13 05:44:34 +0000 |
commit | 266c7bbbbcc4b326dea82e577de1a415d6acc23e (patch) | |
tree | e880304f13d90f5926ead058f546b05e325dd5a2 /include/llvm/GlobalValue.h | |
parent | 2c71b8f64f571b34e8df2a83120a2e889627b8d4 (diff) | |
download | external_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.h | 12 |
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 || |