From a14dff356be24bec8a29522117c8363798838c86 Mon Sep 17 00:00:00 2001 From: Bruno Cardoso Lopes Date: Tue, 21 Jul 2015 21:45:42 +0000 Subject: [PATCH] [AsmPrinter] Check for valid constants in handleIndirectSymViaGOTPCRel Check whether BaseCst is valid before extracting a GlobalValue. This fixes PR24163. Patch by David Majnemer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242840 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 +- test/MC/MachO/cstexpr-gotpcrel-64.ll | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 068b9172e9f..ecdc7fa8b35 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -2101,7 +2101,7 @@ static void handleIndirectSymViaGOTPCRel(AsmPrinter &AP, const MCExpr **ME, if (!AP.GlobalGOTEquivs.count(GOTEquivSym)) return; - const GlobalValue *BaseGV = dyn_cast(BaseCst); + const GlobalValue *BaseGV = dyn_cast_or_null(BaseCst); if (!BaseGV) return; diff --git a/test/MC/MachO/cstexpr-gotpcrel-64.ll b/test/MC/MachO/cstexpr-gotpcrel-64.ll index bafddcb3db6..41abeb0179c 100644 --- a/test/MC/MachO/cstexpr-gotpcrel-64.ll +++ b/test/MC/MachO/cstexpr-gotpcrel-64.ll @@ -1,6 +1,7 @@ ; RUN: llc -mtriple=x86_64-apple-darwin %s -o %t ; RUN: FileCheck %s -check-prefix=X86 < %t ; RUN: FileCheck %s -check-prefix=X86-GOT-EQUIV < %t +; RUN: FileCheck %s -check-prefix=X86-NOGOT-EQUIV < %t ; GOT equivalent globals references can be replaced by the GOT entry of the ; final symbol instead. @@ -86,10 +87,15 @@ define i32** @t1() { } ; Do not crash when a pattern cannot be matched as a GOT equivalent - +define void @foo() { +; X86-NOGOT-EQUIV-LABEL: _foo: +; X86-NOGOT-EQUIV: leaq _b(%rip), %rax + store i8** @b, i8*** null + ret void +} @a = external global i8 @b = internal unnamed_addr constant i8* @a -; X86-LABEL: _c: -; X86: .quad _b +; X86-NOGOT-EQUIV-LABEL: _c: +; X86-NOGOT-EQUIV: .quad _b @c = global i8** @b -- 2.34.1