Index: llvm/trunk/lib/IR/Globals.cpp =================================================================== --- llvm/trunk/lib/IR/Globals.cpp +++ llvm/trunk/lib/IR/Globals.cpp @@ -255,7 +255,7 @@ const GlobalObject *GlobalValue::getBaseObject() const { if (auto *GO = dyn_cast(this)) return GO; - if (auto *GA = dyn_cast(this)) + if (auto *GA = dyn_cast(this)) return GA->getBaseObject(); return nullptr; } Index: llvm/trunk/test/LTO/Resolution/X86/ifunc.ll =================================================================== --- llvm/trunk/test/LTO/Resolution/X86/ifunc.ll +++ llvm/trunk/test/LTO/Resolution/X86/ifunc.ll @@ -0,0 +1,15 @@ +; RUN: opt -module-summary -o %t.bc %s +; RUN: llvm-lto2 run %t.bc -r %t.bc,foo,pl -o %t2 +; RUN: llvm-nm %t2.0 | FileCheck %s +; CHECK: T foo +; CHECK: t foo_ifunc + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@foo = ifunc i32 (i32), i64 ()* @foo_ifunc + +define internal i64 @foo_ifunc() { +entry: + ret i64 0 +} Index: llvm/trunk/test/Object/X86/nm-ir.ll =================================================================== --- llvm/trunk/test/Object/X86/nm-ir.ll +++ llvm/trunk/test/Object/X86/nm-ir.ll @@ -12,7 +12,7 @@ ; CHECK-NEXT: C g3 ; CHECK-NOT: g4 ; CHECK-NEXT: T global_asm_sym -; CHECK-NEXT: D ifunc_f1 +; CHECK-NEXT: T ifunc_f1 ; CHECK-NEXT: t local_asm_sym ; CHECK-NEXT: U undef_asm_sy