1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

Recommit r329716 "Add missing nullptr check before getSection() to AArch64MachObjectWriter::recordRelocation"

This commit fixes the bot failures that were coming up before with r329716.

The fix was to move the check for "isInSection()" inside of the if condition
and emit the error there instead of waiting to get past the unreachable statement.

This should work in debug and release builds now.

llvm-svn: 329746
This commit is contained in:
Jessica Paquette 2018-04-10 19:46:43 +00:00
parent 22d16b8ea1
commit 9222709676
2 changed files with 19 additions and 0 deletions

View File

@ -306,6 +306,15 @@ void AArch64MachObjectWriter::recordRelocation(
bool CanUseLocalRelocation =
canUseLocalRelocation(Section, *Symbol, Log2Size);
if (Symbol->isTemporary() && (Value || !CanUseLocalRelocation)) {
// Make sure that the symbol is actually in a section here. If it isn't,
// emit an error and exit.
if (!Symbol->isInSection()) {
Asm.getContext().reportError(
Fixup.getLoc(),
"unsupported relocation of local symbol '" + Symbol->getName() +
"'. Must have non-local symbol earlier in section.");
return;
}
const MCSection &Sec = Symbol->getSection();
if (!Asm.getContext().getAsmInfo()->isSectionAtomizableBySymbols(Sec))
Symbol->setUsedInReloc();

View File

@ -0,0 +1,10 @@
; RUN: not llc -mtriple=aarch64-darwin-- -filetype=obj %s -o /dev/null 2>&1 >/dev/null | FileCheck %s
; CHECK: error: unsupported relocation of local symbol 'L_foo_end'.
; CHECK-SAME: Must have non-local symbol earlier in section.
; Make sure that we emit an error when we try to reference something that
; doesn't belong to a section.
define void @foo() local_unnamed_addr {
call void asm sideeffect "b L_foo_end\0A", ""()
ret void
}