blob: df3c2aadb06eb17d00c6be0ad1c9360c2e1b21e5 [file] [edit]
REQUIRES: x86
## Test that a DTLTO link assigns Module IDs to thin archive members as expected.
RUN: rm -rf %t && split-file %s %t && cd %t
RUN: sed 's/@t1/@t2/g' t1.ll > t2.ll
RUN: sed 's/@t1/@t3/g' t1.ll > t3.ll
RUN: opt -thinlto-bc t1.ll -o t1.bc
RUN: opt -thinlto-bc t2.ll -o t2.bc
RUN: opt -thinlto-bc t3.ll -o t3.bc
RUN: llvm-ar rcs t1.a t1.bc --thin
## Create this bitcode thin archive in a subdirectory to test the expansion of
## the path to a bitcode file that is referenced using "..", e.g., in this case
## "../t2.bc".
RUN: mkdir lib
RUN: llvm-ar rcs lib/t2.a t2.bc --thin
## Create this bitcode thin archive with an absolute path entry containing "..".
RUN: llvm-ar rcs t3.a %t/lib/../t3.bc --thin
## Link from a different directory to ensure that thin archive member paths are
## resolved correctly relative to the archive locations.
RUN: mkdir %t/out && cd %t/out
## Build a response file to share common linking arguments.
## Note: validate.py does not perform any compilation. Instead, it validates the
## received JSON, pretty-prints the JSON and the supplied arguments, and then
## exits with an error. This allows FileCheck directives to verify the
## distributor inputs.
RUN: echo "%t/t1.a %t/lib/t2.a ../t3.a \
RUN: --thinlto-distributor=\"%python\" \
RUN: --thinlto-distributor-arg=\"%llvm_src_root/utils/dtlto/validate.py\"" > rsp
## Link thin archives using -u/--undefined.
RUN: not ld.lld @rsp -u t1 -u t2 -u t3 2>&1 | FileCheck %s
## Link thin archives using --whole-archive.
RUN: not ld.lld --whole-archive @rsp 2>&1 | FileCheck %s
## Check the module IDs in the JSON jobs description.
CHECK: "jobs": [
CHECK: "inputs": [
CHECK-NEXT: "{{([a-zA-Z]:)|/}}
CHECK-SAME: {{/|\\\\}}archive-thin.test.tmp{{/|\\\\}}t1.bc"
CHECK: "inputs": [
CHECK-NEXT: "{{([a-zA-Z]\:)|/}}
CHECK-SAME: {{/|\\\\}}archive-thin.test.tmp{{/|\\\\}}t2.bc"
CHECK: "inputs": [
CHECK-NEXT: "{{([a-zA-Z]:)|/}}
CHECK-SAME: {{/|\\\\}}archive-thin.test.tmp{{/|\\\\}}t3.bc"
## Ensure backend compilation fails as expected (due to validate.py dummy behavior).
CHECK: error: DTLTO backend compilation: cannot open native object file:
#--- t1.ll
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @t1() {
ret void
}