1*f2b5ec6eSTeresa Johnson; RUN: opt -module-summary %s -o %t1.o 2*f2b5ec6eSTeresa Johnson; RUN: opt -module-summary %p/Inputs/common_thinlto.ll -o %t2.o 3*f2b5ec6eSTeresa Johnson 4*f2b5ec6eSTeresa Johnson; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \ 5*f2b5ec6eSTeresa Johnson; RUN: --plugin-opt=save-temps \ 6*f2b5ec6eSTeresa Johnson; RUN: --plugin-opt=thinlto \ 7*f2b5ec6eSTeresa Johnson; RUN: -shared %t1.o %t2.o -o %t3 8*f2b5ec6eSTeresa Johnson 9*f2b5ec6eSTeresa Johnson; RUN: llvm-dis %t1.o.2.internalize.bc -o - | FileCheck %s --check-prefix=INTERNALIZE 10*f2b5ec6eSTeresa Johnson; We should not have internalized P, and it should still be common. 11*f2b5ec6eSTeresa Johnson; INTERNALIZE: @P = common global 12*f2b5ec6eSTeresa Johnson 13*f2b5ec6eSTeresa Johnson; RUN: llvm-dis %t1.o.4.opt.bc -o - | FileCheck %s --check-prefix=OPT 14*f2b5ec6eSTeresa Johnson; bar should still exist (if we had internalized P it would look dead). 15*f2b5ec6eSTeresa Johnson; OPT: @bar 16*f2b5ec6eSTeresa Johnson 17*f2b5ec6eSTeresa Johnson; RUN: llvm-nm %t3.o | FileCheck %s --check-prefix=NM 18*f2b5ec6eSTeresa Johnson; NM: bar 19*f2b5ec6eSTeresa Johnson 20*f2b5ec6eSTeresa Johnsonsource_filename = "common1.c" 21*f2b5ec6eSTeresa Johnsontarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 22*f2b5ec6eSTeresa Johnsontarget triple = "x86_64-unknown-linux-gnu" 23*f2b5ec6eSTeresa Johnson 24*f2b5ec6eSTeresa Johnson@P = common global i8* (...)* null, align 8 25*f2b5ec6eSTeresa Johnson 26*f2b5ec6eSTeresa Johnsondefine i32 @main() { 27*f2b5ec6eSTeresa Johnsonentry: 28*f2b5ec6eSTeresa Johnson store i8* (...)* bitcast (i8* ()* @bar to i8* (...)*), i8* (...)** @P, align 8 29*f2b5ec6eSTeresa Johnson %call = call i32 (...) @foo() 30*f2b5ec6eSTeresa Johnson ret i32 0 31*f2b5ec6eSTeresa Johnson} 32*f2b5ec6eSTeresa Johnson 33*f2b5ec6eSTeresa Johnsondeclare i32 @foo(...) 34*f2b5ec6eSTeresa Johnson 35*f2b5ec6eSTeresa Johnsondefine internal i8* @bar() { 36*f2b5ec6eSTeresa Johnsonentry: 37*f2b5ec6eSTeresa Johnson ret i8* null 38*f2b5ec6eSTeresa Johnson} 39