Skip to content

Commit 6051407

Browse files
committed
Merging r353907:
------------------------------------------------------------------------ r353907 | rnk | 2019-02-13 02:39:32 +0100 (Wed, 13 Feb 2019) | 6 lines [MC] Make symbol version errors non-fatal We stil don't have a source location, which is pretty lame, but at least we won't tell the user to file a clang bug report anymore. Fixes PR40712 ------------------------------------------------------------------------ llvm-svn: 354257
1 parent 81bd9db commit 6051407

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

llvm/lib/MC/ELFObjectWriter.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,14 +1275,20 @@ void ELFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
12751275
if (!Symbol.isUndefined() && !Rest.startswith("@@@"))
12761276
continue;
12771277

1278-
// FIXME: produce a better error message.
1278+
// FIXME: Get source locations for these errors or diagnose them earlier.
12791279
if (Symbol.isUndefined() && Rest.startswith("@@") &&
1280-
!Rest.startswith("@@@"))
1281-
report_fatal_error("A @@ version cannot be undefined");
1280+
!Rest.startswith("@@@")) {
1281+
Asm.getContext().reportError(SMLoc(), "versioned symbol " + AliasName +
1282+
" must be defined");
1283+
continue;
1284+
}
12821285

1283-
if (Renames.count(&Symbol) && Renames[&Symbol] != Alias)
1284-
report_fatal_error(llvm::Twine("Multiple symbol versions defined for ") +
1285-
Symbol.getName());
1286+
if (Renames.count(&Symbol) && Renames[&Symbol] != Alias) {
1287+
Asm.getContext().reportError(
1288+
SMLoc(), llvm::Twine("multiple symbol versions defined for ") +
1289+
Symbol.getName());
1290+
continue;
1291+
}
12861292

12871293
Renames.insert(std::make_pair(&Symbol, Alias));
12881294
}

llvm/test/MC/ELF/invalid-symver.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t 2> %t.out
22
// RUN: FileCheck --input-file=%t.out %s
33

4-
// CHECK: A @@ version cannot be undefined
4+
// CHECK: error: versioned symbol foo@@bar must be defined
55

66
.symver undefined, foo@@bar
77
.long undefined
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t 2>&1 | FileCheck %s
22

3-
// CHECK: Multiple symbol versions defined for foo
3+
// CHECK: error: multiple symbol versions defined for foo
44

55
.symver foo, foo@1
66
.symver foo, foo@2

0 commit comments

Comments
 (0)