[llvm] r242840 - [AsmPrinter] Check for valid constants in handleIndirectSymViaGOTPCRel

Hans Wennborg hans at chromium.org
Wed Jul 22 14:22:29 PDT 2015


Is this something we should merge to 3.7 (from reading the PR I'm not
sure at what version the bug appeared)

On Tue, Jul 21, 2015 at 2:45 PM, Bruno Cardoso Lopes
<bruno.cardoso at gmail.com> wrote:
> Author: bruno
> Date: Tue Jul 21 16:45:42 2015
> New Revision: 242840
>
> URL: http://llvm.org/viewvc/llvm-project?rev=242840&view=rev
> Log:
> [AsmPrinter] Check for valid constants in handleIndirectSymViaGOTPCRel
>
> Check whether BaseCst is valid before extracting a GlobalValue.
> This fixes PR24163.
>
> Patch by David Majnemer.
>
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>     llvm/trunk/test/MC/MachO/cstexpr-gotpcrel-64.ll
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=242840&r1=242839&r2=242840&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Tue Jul 21 16:45:42 2015
> @@ -2101,7 +2101,7 @@ static void handleIndirectSymViaGOTPCRel
>    if (!AP.GlobalGOTEquivs.count(GOTEquivSym))
>      return;
>
> -  const GlobalValue *BaseGV = dyn_cast<GlobalValue>(BaseCst);
> +  const GlobalValue *BaseGV = dyn_cast_or_null<GlobalValue>(BaseCst);
>    if (!BaseGV)
>      return;
>
>
> Modified: llvm/trunk/test/MC/MachO/cstexpr-gotpcrel-64.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/cstexpr-gotpcrel-64.ll?rev=242840&r1=242839&r2=242840&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/cstexpr-gotpcrel-64.ll (original)
> +++ llvm/trunk/test/MC/MachO/cstexpr-gotpcrel-64.ll Tue Jul 21 16:45:42 2015
> @@ -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
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list