| 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 |
| } |