mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
AsmParser: restore LLVM IR compatibility for linker_private{,_weak}
This restores the linker_private and linker_private_weak lexemes to permit translation of the deprecated lexmes. The behaviour is identical to the bitcode handling: linker_private and linker_private_weak are handled as if private had been specified. This enables compatibility with IR generated by LLVM 3.4. Reported on IRC by ki9a! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205675 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -481,6 +481,8 @@ lltok::Kind LLLexer::LexIdentifier() {
|
|||||||
|
|
||||||
KEYWORD(private);
|
KEYWORD(private);
|
||||||
KEYWORD(internal);
|
KEYWORD(internal);
|
||||||
|
KEYWORD(linker_private); // NOTE: deprecated, for parser compatibility
|
||||||
|
KEYWORD(linker_private_weak); // NOTE: deprecated, for parser compatibility
|
||||||
KEYWORD(available_externally);
|
KEYWORD(available_externally);
|
||||||
KEYWORD(linkonce);
|
KEYWORD(linkonce);
|
||||||
KEYWORD(linkonce_odr);
|
KEYWORD(linkonce_odr);
|
||||||
|
@@ -247,6 +247,8 @@ bool LLParser::ParseTopLevelEntities() {
|
|||||||
// ('constant'|'global') ...
|
// ('constant'|'global') ...
|
||||||
case lltok::kw_private: // OptionalLinkage
|
case lltok::kw_private: // OptionalLinkage
|
||||||
case lltok::kw_internal: // OptionalLinkage
|
case lltok::kw_internal: // OptionalLinkage
|
||||||
|
case lltok::kw_linker_private: // Obsolete OptionalLinkage
|
||||||
|
case lltok::kw_linker_private_weak: // Obsolete OptionalLinkage
|
||||||
case lltok::kw_weak: // OptionalLinkage
|
case lltok::kw_weak: // OptionalLinkage
|
||||||
case lltok::kw_weak_odr: // OptionalLinkage
|
case lltok::kw_weak_odr: // OptionalLinkage
|
||||||
case lltok::kw_linkonce: // OptionalLinkage
|
case lltok::kw_linkonce: // OptionalLinkage
|
||||||
@@ -1286,6 +1288,10 @@ bool LLParser::ParseOptionalReturnAttrs(AttrBuilder &B) {
|
|||||||
/// ::= 'common'
|
/// ::= 'common'
|
||||||
/// ::= 'extern_weak'
|
/// ::= 'extern_weak'
|
||||||
/// ::= 'external'
|
/// ::= 'external'
|
||||||
|
///
|
||||||
|
/// Deprecated Values:
|
||||||
|
/// ::= 'linker_private'
|
||||||
|
/// ::= 'linker_private_weak'
|
||||||
bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) {
|
bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) {
|
||||||
HasLinkage = false;
|
HasLinkage = false;
|
||||||
switch (Lex.getKind()) {
|
switch (Lex.getKind()) {
|
||||||
@@ -1303,6 +1309,13 @@ bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) {
|
|||||||
case lltok::kw_common: Res = GlobalValue::CommonLinkage; break;
|
case lltok::kw_common: Res = GlobalValue::CommonLinkage; break;
|
||||||
case lltok::kw_extern_weak: Res = GlobalValue::ExternalWeakLinkage; break;
|
case lltok::kw_extern_weak: Res = GlobalValue::ExternalWeakLinkage; break;
|
||||||
case lltok::kw_external: Res = GlobalValue::ExternalLinkage; break;
|
case lltok::kw_external: Res = GlobalValue::ExternalLinkage; break;
|
||||||
|
|
||||||
|
case lltok::kw_linker_private:
|
||||||
|
case lltok::kw_linker_private_weak:
|
||||||
|
Lex.Lex();
|
||||||
|
// treat linker_private and linker_private_weak as PrivateLinkage
|
||||||
|
Res = GlobalValue::PrivateLinkage;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
Lex.Lex();
|
Lex.Lex();
|
||||||
HasLinkage = true;
|
HasLinkage = true;
|
||||||
|
@@ -39,6 +39,8 @@ namespace lltok {
|
|||||||
|
|
||||||
kw_private,
|
kw_private,
|
||||||
kw_internal,
|
kw_internal,
|
||||||
|
kw_linker_private, // NOTE: deprecated, for parser compatibility
|
||||||
|
kw_linker_private_weak, // NOTE: deprecated, for parser compatibility
|
||||||
kw_linkonce, kw_linkonce_odr,
|
kw_linkonce, kw_linkonce_odr,
|
||||||
kw_weak, kw_weak_odr, kw_appending,
|
kw_weak, kw_weak_odr, kw_appending,
|
||||||
kw_dllimport, kw_dllexport, kw_common, kw_available_externally,
|
kw_dllimport, kw_dllexport, kw_common, kw_available_externally,
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
; RUN: llvm-as -o - %s | llvm-dis | FileCheck %s
|
||||||
|
|
||||||
|
@.linker_private = linker_private unnamed_addr constant [15 x i8] c"linker_private\00", align 64
|
||||||
|
@.linker_private_weak = linker_private_weak unnamed_addr constant [20 x i8] c"linker_private_weak\00", align 64
|
||||||
|
|
||||||
|
; CHECK: @.linker_private = private unnamed_addr constant [15 x i8] c"linker_private\00", align 64
|
||||||
|
; CHECK: @.linker_private_weak = private unnamed_addr constant [20 x i8] c"linker_private_weak\00", align 64
|
||||||
|
|
Reference in New Issue
Block a user