diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-04-05 20:51:58 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-04-05 20:51:58 +0000 |
commit | 48ee81c6798a415bc592255f385bdb8427b9ebcf (patch) | |
tree | 0b0ed58cad4fb22c30b73619b0e4f73b9ec321cc | |
parent | 2c5f72b629ce9e4676ed1824698e052abd4e162a (diff) | |
download | llvm-48ee81c6798a415bc592255f385bdb8427b9ebcf.tar.gz llvm-48ee81c6798a415bc592255f385bdb8427b9ebcf.tar.bz2 llvm-48ee81c6798a415bc592255f385bdb8427b9ebcf.tar.xz |
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
-rw-r--r-- | lib/AsmParser/LLLexer.cpp | 2 | ||||
-rw-r--r-- | lib/AsmParser/LLParser.cpp | 13 | ||||
-rw-r--r-- | lib/AsmParser/LLToken.h | 2 | ||||
-rw-r--r-- | test/Bitcode/deprecated-linker_private-linker_private_weak.ll | 8 |
4 files changed, 25 insertions, 0 deletions
diff --git a/lib/AsmParser/LLLexer.cpp b/lib/AsmParser/LLLexer.cpp index 1a5eec3db7..4fec7e60fa 100644 --- a/lib/AsmParser/LLLexer.cpp +++ b/lib/AsmParser/LLLexer.cpp @@ -481,6 +481,8 @@ lltok::Kind LLLexer::LexIdentifier() { KEYWORD(private); KEYWORD(internal); + KEYWORD(linker_private); // NOTE: deprecated, for parser compatibility + KEYWORD(linker_private_weak); // NOTE: deprecated, for parser compatibility KEYWORD(available_externally); KEYWORD(linkonce); KEYWORD(linkonce_odr); diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 37151e68cb..b53b4ce7c0 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -247,6 +247,8 @@ bool LLParser::ParseTopLevelEntities() { // ('constant'|'global') ... case lltok::kw_private: // 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_odr: // OptionalLinkage case lltok::kw_linkonce: // OptionalLinkage @@ -1286,6 +1288,10 @@ bool LLParser::ParseOptionalReturnAttrs(AttrBuilder &B) { /// ::= 'common' /// ::= 'extern_weak' /// ::= 'external' +/// +/// Deprecated Values: +/// ::= 'linker_private' +/// ::= 'linker_private_weak' bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) { HasLinkage = false; 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_extern_weak: Res = GlobalValue::ExternalWeakLinkage; 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(); HasLinkage = true; diff --git a/lib/AsmParser/LLToken.h b/lib/AsmParser/LLToken.h index 532e896b18..00f7fe8c12 100644 --- a/lib/AsmParser/LLToken.h +++ b/lib/AsmParser/LLToken.h @@ -39,6 +39,8 @@ namespace lltok { kw_private, 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_weak, kw_weak_odr, kw_appending, kw_dllimport, kw_dllexport, kw_common, kw_available_externally, diff --git a/test/Bitcode/deprecated-linker_private-linker_private_weak.ll b/test/Bitcode/deprecated-linker_private-linker_private_weak.ll new file mode 100644 index 0000000000..538f6419a1 --- /dev/null +++ b/test/Bitcode/deprecated-linker_private-linker_private_weak.ll @@ -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 + |