diff --git a/lld/test/ELF/lto/Inputs/internalize-exportdyn.ll b/lld/test/ELF/lto/Inputs/internalize-exportdyn.ll index 585b99ae5a51..5bfe15c92b3f 100644 --- a/lld/test/ELF/lto/Inputs/internalize-exportdyn.ll +++ b/lld/test/ELF/lto/Inputs/internalize-exportdyn.ll @@ -1,6 +1,31 @@ target triple = "x86_64-unknown-linux-gnu" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +$ext_and_ext = comdat any +$lo_and_ext = comdat any +$lo_and_wo = comdat any +$wo_and_lo = comdat any + +declare void @foo(i64) + define weak_odr void @bah() { ret void } + +define void @ext_and_ext() local_unnamed_addr comdat { + call void @foo(i64 2) + ret void +} + +define linkonce_odr void @lo_and_ext() local_unnamed_addr comdat { + call void @foo(i64 2) + ret void +} + +define weak_odr void @lo_and_wo() local_unnamed_addr comdat { + ret void +} + +define linkonce_odr void @wo_and_lo() local_unnamed_addr comdat { + ret void +} diff --git a/lld/test/ELF/lto/internalize-exportdyn.ll b/lld/test/ELF/lto/internalize-exportdyn.ll index f02d3b375dad..7c670a548025 100644 --- a/lld/test/ELF/lto/internalize-exportdyn.ll +++ b/lld/test/ELF/lto/internalize-exportdyn.ll @@ -1,14 +1,22 @@ ; REQUIRES: x86 -; RUN: llvm-as %s -o %t.o -; RUN: llvm-as %p/Inputs/internalize-exportdyn.ll -o %t2.o -; RUN: ld.lld %t.o %t2.o -o %t2 --export-dynamic -save-temps -; RUN: llvm-dis < %t2.0.2.internalize.bc | FileCheck %s -; RUN: ld.lld %t.o %t2.o -o %t3 -shared -save-temps -; RUN: llvm-dis < %t3.0.2.internalize.bc | FileCheck %s --check-prefix=DSO +; RUN: rm -rf %t && split-file %s %t && cd %t +; RUN: llvm-as a.ll -o a.bc +; RUN: llvm-as %p/Inputs/internalize-exportdyn.ll -o b.bc +; RUN: llvm-mc -filetype=obj -triple=x86_64 lib.s -o lib.o +; RUN: ld.lld a.bc b.bc lib.o -o out --export-dynamic -save-temps +; RUN: llvm-dis < out.0.2.internalize.bc | FileCheck %s +; RUN: ld.lld a.bc b.bc lib.o -o out2 -shared -save-temps +; RUN: llvm-dis < out2.0.2.internalize.bc | FileCheck %s --check-prefix=DSO +;--- a.ll target triple = "x86_64-unknown-linux-gnu" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +$ext_and_ext = comdat any +$lo_and_ext = comdat any +$lo_and_wo = comdat any +$wo_and_lo = comdat any + @c = linkonce_odr constant i32 1 @g = linkonce_odr global i32 1 @u_c = linkonce_odr unnamed_addr constant i32 1 @@ -16,6 +24,8 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 @lu_c = linkonce_odr local_unnamed_addr constant i32 1 @lu_g = linkonce_odr local_unnamed_addr global i32 1 +declare void @lib(i64) + define void @_start() { ret void } @@ -46,6 +56,24 @@ define linkonce_odr void @baz() { @use_baz = global ptr @baz +define void @ext_and_ext() local_unnamed_addr comdat { + call void @foo(i64 1) + ret void +} + +define linkonce_odr void @lo_and_ext() local_unnamed_addr comdat { + call void @foo(i64 1) + ret void +} + +define linkonce_odr void @lo_and_wo() local_unnamed_addr comdat { + ret void +} + +define weak_odr void @wo_and_lo() local_unnamed_addr comdat { + ret void +} + ; Check what gets internalized. ; CHECK: @c = weak_odr dso_local constant i32 1 ; CHECK: @g = weak_odr dso_local global i32 1 @@ -60,6 +88,12 @@ define linkonce_odr void @baz() { ; CHECK: define internal void @zed2() ; CHECK: define weak_odr dso_local void @bah() ; CHECK: define weak_odr dso_local void @baz() +; CHECK: define dso_local void @ext_and_ext() comdat +; CHECK-NEXT: call void @foo(i64 1) +; CHECK: define internal void @lo_and_ext() comdat +; CHECK-NEXT: call void @foo(i64 1) +; CHECK: define internal void @lo_and_wo() comdat +; CHECK: define weak_odr dso_local void @wo_and_lo() comdat ; DSO: @c = weak_odr constant i32 1 ; DSO: @g = weak_odr global i32 1 @@ -74,3 +108,11 @@ define linkonce_odr void @baz() { ; DSO: define internal void @zed2() ; DSO: define weak_odr void @bah() ; DSO: define weak_odr void @baz() +; DSO: define void @ext_and_ext() comdat +; DSO: define internal void @lo_and_ext() comdat +; DSO: define internal void @lo_and_wo() comdat +; DSO: define weak_odr void @wo_and_lo() comdat + +;--- lib.s +.globl lib +lib: