forked from OSchip/llvm-project
Change the `linker_private_weak_def_auto' linkage to `linkonce_odr_auto_hide' to
make it more consistent with its intended semantics. The `linker_private_weak_def_auto' linkage type was meant to automatically hide globals which never had their addresses taken. It has nothing to do with the `linker_private' linkage type, which outputs the symbols with a `l' (ell) prefix among other things. The intended semantic is more like the `linkonce_odr' linkage type. Change the name of the linkage type to `linkonce_odr_auto_hide'. And therefore changing the semantics so that it produces the correct output for the linker. Note: The old linkage name `linker_private_weak_def_auto' will still parse but is not a synonym for `linkonce_odr_auto_hide'. This should be removed in 4.0. <rdar://problem/11754934> llvm-svn: 162114
This commit is contained in:
parent
9a16735e22
commit
34bc34ecae
|
@ -25,7 +25,6 @@
|
|||
<li><a href="#linkage_private">'<tt>private</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_linker_private">'<tt>linker_private</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_linker_private_weak">'<tt>linker_private_weak</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_linker_private_weak_def_auto">'<tt>linker_private_weak_def_auto</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_internal">'<tt>internal</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_available_externally">'<tt>available_externally</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_linkonce">'<tt>linkonce</tt>' Linkage</a></li>
|
||||
|
@ -34,6 +33,7 @@
|
|||
<li><a href="#linkage_appending">'<tt>appending</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_externweak">'<tt>extern_weak</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_linkonce_odr">'<tt>linkonce_odr</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_linkonce_odr_auto_hide">'<tt>linkonce_odr_auto_hide</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_weak">'<tt>weak_odr</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_external">'<tt>external</tt>' Linkage</a></li>
|
||||
<li><a href="#linkage_dllimport">'<tt>dllimport</tt>' Linkage</a></li>
|
||||
|
@ -576,15 +576,6 @@ define i32 @main() { <i>; i32()* </i>
|
|||
linker. The symbols are removed by the linker from the final linked image
|
||||
(executable or dynamic library).</dd>
|
||||
|
||||
<dt><tt><b><a name="linkage_linker_private_weak_def_auto">linker_private_weak_def_auto</a></b></tt></dt>
|
||||
<dd>Similar to "<tt>linker_private_weak</tt>", but it's known that the address
|
||||
of the object is not taken. For instance, functions that had an inline
|
||||
definition, but the compiler decided not to inline it. Note,
|
||||
unlike <tt>linker_private</tt> and <tt>linker_private_weak</tt>,
|
||||
<tt>linker_private_weak_def_auto</tt> may have only <tt>default</tt>
|
||||
visibility. The symbols are removed by the linker from the final linked
|
||||
image (executable or dynamic library).</dd>
|
||||
|
||||
<dt><tt><b><a name="linkage_internal">internal</a></b></tt></dt>
|
||||
<dd>Similar to private, but the value shows as a local symbol
|
||||
(<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This
|
||||
|
@ -653,6 +644,14 @@ define i32 @main() { <i>; i32()* </i>
|
|||
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_linkonce_odr_auto_hide">linkonce_odr_auto_hide</a></b></tt></dt>
|
||||
<dd>Similar to "<tt>linkonce_odr</tt>", but nothing in the translation unit
|
||||
takes the address of this definition. For instance, functions that had an
|
||||
inline definition, but the compiler decided not to inline it.
|
||||
<tt>linkonce_odr_auto_hide</tt> may have only <tt>default</tt> visibility.
|
||||
The symbols are removed by the linker from the final linked image
|
||||
(executable or dynamic library).</dd>
|
||||
|
||||
<dt><tt><b><a name="linkage_external">external</a></b></tt></dt>
|
||||
<dd>If none of the above identifiers are used, the global is externally
|
||||
visible, meaning that it participates in linkage and can be used to
|
||||
|
|
|
@ -282,6 +282,7 @@ typedef enum {
|
|||
LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
|
||||
LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
|
||||
equivalent. */
|
||||
LLVMLinkOnceODRAutoHideLinkage, /**< Like LinkOnceODR, but possibly hidden. */
|
||||
LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
|
||||
LLVMWeakODRLinkage, /**< Same, but only replaced by something
|
||||
equivalent. */
|
||||
|
@ -295,9 +296,7 @@ typedef enum {
|
|||
LLVMGhostLinkage, /**< Obsolete */
|
||||
LLVMCommonLinkage, /**< Tentative definitions */
|
||||
LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
|
||||
LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
|
||||
LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
|
||||
hidden. */
|
||||
LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
|
||||
} LLVMLinkage;
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -34,6 +34,7 @@ public:
|
|||
AvailableExternallyLinkage, ///< Available for inspection, not emission.
|
||||
LinkOnceAnyLinkage, ///< Keep one copy of function when linking (inline)
|
||||
LinkOnceODRLinkage, ///< Same, but only replaced by something equivalent.
|
||||
LinkOnceODRAutoHideLinkage, ///< Like LinkOnceODRLinkage but addr not taken.
|
||||
WeakAnyLinkage, ///< Keep one copy of named function when linking (weak)
|
||||
WeakODRLinkage, ///< Same, but only replaced by something equivalent.
|
||||
AppendingLinkage, ///< Special purpose, only applies to global arrays
|
||||
|
@ -41,8 +42,6 @@ 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.
|
||||
|
@ -123,7 +122,12 @@ public:
|
|||
return Linkage == AvailableExternallyLinkage;
|
||||
}
|
||||
static bool isLinkOnceLinkage(LinkageTypes Linkage) {
|
||||
return Linkage == LinkOnceAnyLinkage || Linkage == LinkOnceODRLinkage;
|
||||
return Linkage == LinkOnceAnyLinkage ||
|
||||
Linkage == LinkOnceODRLinkage ||
|
||||
Linkage == LinkOnceODRAutoHideLinkage;
|
||||
}
|
||||
static bool isLinkOnceODRAutoHideLinkage(LinkageTypes Linkage) {
|
||||
return Linkage == LinkOnceODRAutoHideLinkage;
|
||||
}
|
||||
static bool isWeakLinkage(LinkageTypes Linkage) {
|
||||
return Linkage == WeakAnyLinkage || Linkage == WeakODRLinkage;
|
||||
|
@ -143,13 +147,9 @@ 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) ||
|
||||
isLinkerPrivateWeakDefAutoLinkage(Linkage);
|
||||
isLinkerPrivateLinkage(Linkage) || isLinkerPrivateWeakLinkage(Linkage);
|
||||
}
|
||||
static bool isDLLImportLinkage(LinkageTypes Linkage) {
|
||||
return Linkage == DLLImportLinkage;
|
||||
|
@ -178,8 +178,7 @@ public:
|
|||
Linkage == LinkOnceAnyLinkage ||
|
||||
Linkage == CommonLinkage ||
|
||||
Linkage == ExternalWeakLinkage ||
|
||||
Linkage == LinkerPrivateWeakLinkage ||
|
||||
Linkage == LinkerPrivateWeakDefAutoLinkage;
|
||||
Linkage == LinkerPrivateWeakLinkage;
|
||||
}
|
||||
|
||||
/// isWeakForLinker - Whether the definition of this global may be replaced at
|
||||
|
@ -192,10 +191,10 @@ public:
|
|||
Linkage == WeakODRLinkage ||
|
||||
Linkage == LinkOnceAnyLinkage ||
|
||||
Linkage == LinkOnceODRLinkage ||
|
||||
Linkage == LinkOnceODRAutoHideLinkage ||
|
||||
Linkage == CommonLinkage ||
|
||||
Linkage == ExternalWeakLinkage ||
|
||||
Linkage == LinkerPrivateWeakLinkage ||
|
||||
Linkage == LinkerPrivateWeakDefAutoLinkage;
|
||||
Linkage == LinkerPrivateWeakLinkage;
|
||||
}
|
||||
|
||||
bool hasExternalLinkage() const { return isExternalLinkage(Linkage); }
|
||||
|
@ -205,6 +204,9 @@ public:
|
|||
bool hasLinkOnceLinkage() const {
|
||||
return isLinkOnceLinkage(Linkage);
|
||||
}
|
||||
bool hasLinkOnceODRAutoHideLinkage() const {
|
||||
return isLinkOnceODRAutoHideLinkage(Linkage);
|
||||
}
|
||||
bool hasWeakLinkage() const {
|
||||
return isWeakLinkage(Linkage);
|
||||
}
|
||||
|
@ -215,9 +217,6 @@ 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); }
|
||||
|
|
|
@ -456,11 +456,12 @@ lltok::Kind LLLexer::LexIdentifier() {
|
|||
KEYWORD(private);
|
||||
KEYWORD(linker_private);
|
||||
KEYWORD(linker_private_weak);
|
||||
KEYWORD(linker_private_weak_def_auto);
|
||||
KEYWORD(linker_private_weak_def_auto); // FIXME: For backwards compatibility.
|
||||
KEYWORD(internal);
|
||||
KEYWORD(available_externally);
|
||||
KEYWORD(linkonce);
|
||||
KEYWORD(linkonce_odr);
|
||||
KEYWORD(linkonce_odr_auto_hide);
|
||||
KEYWORD(weak);
|
||||
KEYWORD(weak_odr);
|
||||
KEYWORD(appending);
|
||||
|
|
|
@ -184,12 +184,13 @@ bool LLParser::ParseTopLevelEntities() {
|
|||
case lltok::kw_private: // OptionalLinkage
|
||||
case lltok::kw_linker_private: // OptionalLinkage
|
||||
case lltok::kw_linker_private_weak: // OptionalLinkage
|
||||
case lltok::kw_linker_private_weak_def_auto: // OptionalLinkage
|
||||
case lltok::kw_linker_private_weak_def_auto: // FIXME: backwards compat.
|
||||
case lltok::kw_internal: // OptionalLinkage
|
||||
case lltok::kw_weak: // OptionalLinkage
|
||||
case lltok::kw_weak_odr: // OptionalLinkage
|
||||
case lltok::kw_linkonce: // OptionalLinkage
|
||||
case lltok::kw_linkonce_odr: // OptionalLinkage
|
||||
case lltok::kw_linkonce_odr_auto_hide: // OptionalLinkage
|
||||
case lltok::kw_appending: // OptionalLinkage
|
||||
case lltok::kw_dllexport: // OptionalLinkage
|
||||
case lltok::kw_common: // OptionalLinkage
|
||||
|
@ -576,8 +577,7 @@ bool LLParser::ParseAlias(const std::string &Name, LocTy NameLoc,
|
|||
Linkage != GlobalValue::InternalLinkage &&
|
||||
Linkage != GlobalValue::PrivateLinkage &&
|
||||
Linkage != GlobalValue::LinkerPrivateLinkage &&
|
||||
Linkage != GlobalValue::LinkerPrivateWeakLinkage &&
|
||||
Linkage != GlobalValue::LinkerPrivateWeakDefAutoLinkage)
|
||||
Linkage != GlobalValue::LinkerPrivateWeakLinkage)
|
||||
return Error(LinkageLoc, "invalid linkage type for alias");
|
||||
|
||||
Constant *Aliasee;
|
||||
|
@ -990,12 +990,12 @@ bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) {
|
|||
/// ::= 'private'
|
||||
/// ::= 'linker_private'
|
||||
/// ::= 'linker_private_weak'
|
||||
/// ::= 'linker_private_weak_def_auto'
|
||||
/// ::= 'internal'
|
||||
/// ::= 'weak'
|
||||
/// ::= 'weak_odr'
|
||||
/// ::= 'linkonce'
|
||||
/// ::= 'linkonce_odr'
|
||||
/// ::= 'linkonce_odr_auto_hide'
|
||||
/// ::= 'available_externally'
|
||||
/// ::= 'appending'
|
||||
/// ::= 'dllexport'
|
||||
|
@ -1012,14 +1012,15 @@ bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) {
|
|||
case lltok::kw_linker_private_weak:
|
||||
Res = GlobalValue::LinkerPrivateWeakLinkage;
|
||||
break;
|
||||
case lltok::kw_linker_private_weak_def_auto:
|
||||
Res = GlobalValue::LinkerPrivateWeakDefAutoLinkage;
|
||||
break;
|
||||
case lltok::kw_internal: Res = GlobalValue::InternalLinkage; break;
|
||||
case lltok::kw_weak: Res = GlobalValue::WeakAnyLinkage; break;
|
||||
case lltok::kw_weak_odr: Res = GlobalValue::WeakODRLinkage; break;
|
||||
case lltok::kw_linkonce: Res = GlobalValue::LinkOnceAnyLinkage; break;
|
||||
case lltok::kw_linkonce_odr: Res = GlobalValue::LinkOnceODRLinkage; break;
|
||||
case lltok::kw_linkonce_odr_auto_hide:
|
||||
case lltok::kw_linker_private_weak_def_auto: // FIXME: For backwards compat.
|
||||
Res = GlobalValue::LinkOnceODRAutoHideLinkage;
|
||||
break;
|
||||
case lltok::kw_available_externally:
|
||||
Res = GlobalValue::AvailableExternallyLinkage;
|
||||
break;
|
||||
|
@ -2653,11 +2654,11 @@ bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
|
|||
case GlobalValue::PrivateLinkage:
|
||||
case GlobalValue::LinkerPrivateLinkage:
|
||||
case GlobalValue::LinkerPrivateWeakLinkage:
|
||||
case GlobalValue::LinkerPrivateWeakDefAutoLinkage:
|
||||
case GlobalValue::InternalLinkage:
|
||||
case GlobalValue::AvailableExternallyLinkage:
|
||||
case GlobalValue::LinkOnceAnyLinkage:
|
||||
case GlobalValue::LinkOnceODRLinkage:
|
||||
case GlobalValue::LinkOnceODRAutoHideLinkage:
|
||||
case GlobalValue::WeakAnyLinkage:
|
||||
case GlobalValue::WeakODRLinkage:
|
||||
case GlobalValue::DLLExportLinkage:
|
||||
|
|
|
@ -37,8 +37,10 @@ namespace lltok {
|
|||
kw_global, kw_constant,
|
||||
|
||||
kw_private, kw_linker_private, kw_linker_private_weak,
|
||||
kw_linker_private_weak_def_auto, kw_internal,
|
||||
kw_linkonce, kw_linkonce_odr, kw_weak, kw_weak_odr, kw_appending,
|
||||
kw_linker_private_weak_def_auto, // FIXME: For backwards compatibility.
|
||||
kw_internal,
|
||||
kw_linkonce, kw_linkonce_odr, kw_linkonce_odr_auto_hide,
|
||||
kw_weak, kw_weak_odr, kw_appending,
|
||||
kw_dllimport, kw_dllexport, kw_common, kw_available_externally,
|
||||
kw_default, kw_hidden, kw_protected,
|
||||
kw_unnamed_addr,
|
||||
|
|
|
@ -89,7 +89,7 @@ static GlobalValue::LinkageTypes GetDecodedLinkage(unsigned Val) {
|
|||
case 12: return GlobalValue::AvailableExternallyLinkage;
|
||||
case 13: return GlobalValue::LinkerPrivateLinkage;
|
||||
case 14: return GlobalValue::LinkerPrivateWeakLinkage;
|
||||
case 15: return GlobalValue::LinkerPrivateWeakDefAutoLinkage;
|
||||
case 15: return GlobalValue::LinkOnceODRAutoHideLinkage;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -365,7 +365,7 @@ static unsigned getEncodedLinkage(const GlobalValue *GV) {
|
|||
case GlobalValue::AvailableExternallyLinkage: return 12;
|
||||
case GlobalValue::LinkerPrivateLinkage: return 13;
|
||||
case GlobalValue::LinkerPrivateWeakLinkage: return 14;
|
||||
case GlobalValue::LinkerPrivateWeakDefAutoLinkage: return 15;
|
||||
case GlobalValue::LinkOnceODRAutoHideLinkage: return 15;
|
||||
}
|
||||
llvm_unreachable("Invalid linkage");
|
||||
}
|
||||
|
|
|
@ -213,16 +213,16 @@ void AsmPrinter::EmitLinkage(unsigned Linkage, MCSymbol *GVSym) const {
|
|||
case GlobalValue::CommonLinkage:
|
||||
case GlobalValue::LinkOnceAnyLinkage:
|
||||
case GlobalValue::LinkOnceODRLinkage:
|
||||
case GlobalValue::LinkOnceODRAutoHideLinkage:
|
||||
case GlobalValue::WeakAnyLinkage:
|
||||
case GlobalValue::WeakODRLinkage:
|
||||
case GlobalValue::LinkerPrivateWeakLinkage:
|
||||
case GlobalValue::LinkerPrivateWeakDefAutoLinkage:
|
||||
if (MAI->getWeakDefDirective() != 0) {
|
||||
// .globl _foo
|
||||
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Global);
|
||||
|
||||
if ((GlobalValue::LinkageTypes)Linkage !=
|
||||
GlobalValue::LinkerPrivateWeakDefAutoLinkage)
|
||||
GlobalValue::LinkOnceODRAutoHideLinkage)
|
||||
// .weak_definition _foo
|
||||
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_WeakDefinition);
|
||||
else
|
||||
|
|
|
@ -285,14 +285,14 @@ void CppWriter::printLinkageType(GlobalValue::LinkageTypes LT) {
|
|||
Out << "GlobalValue::LinkerPrivateLinkage"; break;
|
||||
case GlobalValue::LinkerPrivateWeakLinkage:
|
||||
Out << "GlobalValue::LinkerPrivateWeakLinkage"; break;
|
||||
case GlobalValue::LinkerPrivateWeakDefAutoLinkage:
|
||||
Out << "GlobalValue::LinkerPrivateWeakDefAutoLinkage"; break;
|
||||
case GlobalValue::AvailableExternallyLinkage:
|
||||
Out << "GlobalValue::AvailableExternallyLinkage "; break;
|
||||
case GlobalValue::LinkOnceAnyLinkage:
|
||||
Out << "GlobalValue::LinkOnceAnyLinkage "; break;
|
||||
case GlobalValue::LinkOnceODRLinkage:
|
||||
Out << "GlobalValue::LinkOnceODRLinkage "; break;
|
||||
case GlobalValue::LinkOnceODRAutoHideLinkage:
|
||||
Out << "GlobalValue::LinkOnceODRAutoHideLinkage"; break;
|
||||
case GlobalValue::WeakAnyLinkage:
|
||||
Out << "GlobalValue::WeakAnyLinkage"; break;
|
||||
case GlobalValue::WeakODRLinkage:
|
||||
|
|
|
@ -183,8 +183,7 @@ void Mangler::getNameWithPrefix(SmallVectorImpl<char> &OutName,
|
|||
ManglerPrefixTy PrefixTy = Mangler::Default;
|
||||
if (GV->hasPrivateLinkage() || isImplicitlyPrivate)
|
||||
PrefixTy = Mangler::Private;
|
||||
else if (GV->hasLinkerPrivateLinkage() || GV->hasLinkerPrivateWeakLinkage() ||
|
||||
GV->hasLinkerPrivateWeakDefAutoLinkage())
|
||||
else if (GV->hasLinkerPrivateLinkage() || GV->hasLinkerPrivateWeakLinkage())
|
||||
PrefixTy = Mangler::LinkerPrivate;
|
||||
|
||||
// If this global has a name, handle it simply.
|
||||
|
|
|
@ -1353,12 +1353,12 @@ static void PrintLinkage(GlobalValue::LinkageTypes LT,
|
|||
case GlobalValue::LinkerPrivateWeakLinkage:
|
||||
Out << "linker_private_weak ";
|
||||
break;
|
||||
case GlobalValue::LinkerPrivateWeakDefAutoLinkage:
|
||||
Out << "linker_private_weak_def_auto ";
|
||||
break;
|
||||
case GlobalValue::InternalLinkage: Out << "internal "; break;
|
||||
case GlobalValue::LinkOnceAnyLinkage: Out << "linkonce "; break;
|
||||
case GlobalValue::LinkOnceODRLinkage: Out << "linkonce_odr "; break;
|
||||
case GlobalValue::LinkOnceODRAutoHideLinkage:
|
||||
Out << "linkonce_odr_auto_hide ";
|
||||
break;
|
||||
case GlobalValue::WeakAnyLinkage: Out << "weak "; break;
|
||||
case GlobalValue::WeakODRLinkage: Out << "weak_odr "; break;
|
||||
case GlobalValue::CommonLinkage: Out << "common "; break;
|
||||
|
|
|
@ -1084,6 +1084,8 @@ LLVMLinkage LLVMGetLinkage(LLVMValueRef Global) {
|
|||
return LLVMLinkOnceAnyLinkage;
|
||||
case GlobalValue::LinkOnceODRLinkage:
|
||||
return LLVMLinkOnceODRLinkage;
|
||||
case GlobalValue::LinkOnceODRAutoHideLinkage:
|
||||
return LLVMLinkOnceODRAutoHideLinkage;
|
||||
case GlobalValue::WeakAnyLinkage:
|
||||
return LLVMWeakAnyLinkage;
|
||||
case GlobalValue::WeakODRLinkage:
|
||||
|
@ -1098,8 +1100,6 @@ LLVMLinkage LLVMGetLinkage(LLVMValueRef Global) {
|
|||
return LLVMLinkerPrivateLinkage;
|
||||
case GlobalValue::LinkerPrivateWeakLinkage:
|
||||
return LLVMLinkerPrivateWeakLinkage;
|
||||
case GlobalValue::LinkerPrivateWeakDefAutoLinkage:
|
||||
return LLVMLinkerPrivateWeakDefAutoLinkage;
|
||||
case GlobalValue::DLLImportLinkage:
|
||||
return LLVMDLLImportLinkage;
|
||||
case GlobalValue::DLLExportLinkage:
|
||||
|
@ -1129,6 +1129,9 @@ void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) {
|
|||
case LLVMLinkOnceODRLinkage:
|
||||
GV->setLinkage(GlobalValue::LinkOnceODRLinkage);
|
||||
break;
|
||||
case LLVMLinkOnceODRAutoHideLinkage:
|
||||
GV->setLinkage(GlobalValue::LinkOnceODRAutoHideLinkage);
|
||||
break;
|
||||
case LLVMWeakAnyLinkage:
|
||||
GV->setLinkage(GlobalValue::WeakAnyLinkage);
|
||||
break;
|
||||
|
@ -1150,9 +1153,6 @@ void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) {
|
|||
case LLVMLinkerPrivateWeakLinkage:
|
||||
GV->setLinkage(GlobalValue::LinkerPrivateWeakLinkage);
|
||||
break;
|
||||
case LLVMLinkerPrivateWeakDefAutoLinkage:
|
||||
GV->setLinkage(GlobalValue::LinkerPrivateWeakDefAutoLinkage);
|
||||
break;
|
||||
case LLVMDLLImportLinkage:
|
||||
GV->setLinkage(GlobalValue::DLLImportLinkage);
|
||||
break;
|
||||
|
|
|
@ -400,8 +400,8 @@ void Verifier::visitGlobalValue(GlobalValue &GV) {
|
|||
"Only global arrays can have appending linkage!", GVar);
|
||||
}
|
||||
|
||||
Assert1(!GV.hasLinkerPrivateWeakDefAutoLinkage() || GV.hasDefaultVisibility(),
|
||||
"linker_private_weak_def_auto can only have default visibility!",
|
||||
Assert1(!GV.hasLinkOnceODRAutoHideLinkage() || GV.hasDefaultVisibility(),
|
||||
"linkonce_odr_auto_hide can only have default visibility!",
|
||||
&GV);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,4 +4,3 @@
|
|||
|
||||
@foo = linker_private hidden global i32 0
|
||||
@bar = linker_private_weak hidden global i32 0
|
||||
@qux = linker_private_weak_def_auto global i32 0
|
||||
|
|
|
@ -256,7 +256,6 @@ static void DumpSymbolNameForGlobalValue(GlobalValue &GV) {
|
|||
if (GV.hasPrivateLinkage() ||
|
||||
GV.hasLinkerPrivateLinkage() ||
|
||||
GV.hasLinkerPrivateWeakLinkage() ||
|
||||
GV.hasLinkerPrivateWeakDefAutoLinkage() ||
|
||||
GV.hasAvailableExternallyLinkage())
|
||||
return;
|
||||
char TypeChar = TypeCharForSymbol(GV);
|
||||
|
|
|
@ -487,8 +487,7 @@ void LTOModule::addDefinedSymbol(GlobalValue *def, bool isFunction) {
|
|||
|
||||
// set definition part
|
||||
if (def->hasWeakLinkage() || def->hasLinkOnceLinkage() ||
|
||||
def->hasLinkerPrivateWeakLinkage() ||
|
||||
def->hasLinkerPrivateWeakDefAutoLinkage())
|
||||
def->hasLinkerPrivateWeakLinkage())
|
||||
attr |= LTO_SYMBOL_DEFINITION_WEAK;
|
||||
else if (def->hasCommonLinkage())
|
||||
attr |= LTO_SYMBOL_DEFINITION_TENTATIVE;
|
||||
|
@ -504,7 +503,7 @@ void LTOModule::addDefinedSymbol(GlobalValue *def, bool isFunction) {
|
|||
def->hasLinkOnceLinkage() || def->hasCommonLinkage() ||
|
||||
def->hasLinkerPrivateWeakLinkage())
|
||||
attr |= LTO_SYMBOL_SCOPE_DEFAULT;
|
||||
else if (def->hasLinkerPrivateWeakDefAutoLinkage())
|
||||
else if (def->hasLinkOnceODRAutoHideLinkage())
|
||||
attr |= LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN;
|
||||
else
|
||||
attr |= LTO_SYMBOL_SCOPE_INTERNAL;
|
||||
|
|
Loading…
Reference in New Issue