mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-01 05:11:15 +00:00
Relax the grammar of the version script.
In GNU linkers, the last semicolon is optional. We can't link libstdc++ with lld because of that difference. Differential Revision: https://reviews.llvm.org/D42820 llvm-svn: 324036
This commit is contained in:
parent
b2c3ea7603
commit
17324d8b34
@ -1233,6 +1233,9 @@ ScriptParser::readSymbols() {
|
||||
|
||||
// Reads an "extern C++" directive, e.g.,
|
||||
// "extern "C++" { ns::*; "f(int, double)"; };"
|
||||
//
|
||||
// The last semicolon is optional. E.g. this is OK:
|
||||
// "extern "C++" { ns::*; "f(int, double)" };"
|
||||
std::vector<SymbolVersion> ScriptParser::readVersionExtern() {
|
||||
StringRef Tok = next();
|
||||
bool IsCXX = Tok == "\"C++\"";
|
||||
@ -1245,6 +1248,8 @@ std::vector<SymbolVersion> ScriptParser::readVersionExtern() {
|
||||
StringRef Tok = next();
|
||||
bool HasWildcard = !Tok.startswith("\"") && hasWildcard(Tok);
|
||||
Ret.push_back({unquote(Tok), IsCXX, HasWildcard});
|
||||
if (consume("}"))
|
||||
return Ret;
|
||||
expect(";");
|
||||
}
|
||||
|
||||
|
@ -4,12 +4,8 @@
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
||||
|
||||
# RUN: echo '{ \
|
||||
# RUN: extern "C" { \
|
||||
# RUN: foo; \
|
||||
# RUN: }; \
|
||||
# RUN: extern "C++" { \
|
||||
# RUN: bar; \
|
||||
# RUN: }; \
|
||||
# RUN: };' > %t.list
|
||||
# RUN: echo '{ extern "C" { foo; }; extern "C++" { bar; }; };' > %t.list
|
||||
# RUN: ld.lld --dynamic-list %t.list %t.o -shared -o %t.so
|
||||
|
||||
# RUN: echo '{ extern "C" { foo }; extern "C++" { bar }; };' > %t.list
|
||||
# RUN: ld.lld --dynamic-list %t.list %t.o -shared -o %t.so
|
||||
|
Loading…
Reference in New Issue
Block a user