From 26b4db2a70d17bb19b1538d158b6a258c15bf58a Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Sat, 26 Jul 2025 06:11:41 +0000 Subject: [PATCH 1/3] [lld] Remove uses of %T from tests %T has been deprecated for about seven years. It is to be avoided for the most part given it does not create a unique directory per test. So, remove it from lld tests with eventual intention of removing support from llvm-lit. Most of the cases in lld were not misusing the feature, using it to get the directory that the test objects were in or as a path to pass for -libpath. These cases all work perfectly well with a created directory however and allow for the removal of %T to prevent incorrect usage. --- lld/test/COFF/nodefaultlib.test | 19 ++++++++++--------- lld/test/COFF/pdb-options.test | 12 +++++++----- .../pdb-type-server-invalid-signature.yaml | 1 - lld/test/COFF/wrap-lto-2.ll | 14 ++++++++------ lld/test/COFF/wrap-with-archive.s | 3 ++- lld/test/wasm/lto/save-temps.ll | 3 ++- .../llvm-exegesis/X86/analysis-uops.test | 1 + 7 files changed, 30 insertions(+), 23 deletions(-) diff --git a/lld/test/COFF/nodefaultlib.test b/lld/test/COFF/nodefaultlib.test index ceeb1f393b141..fbf6b43a11dfe 100644 --- a/lld/test/COFF/nodefaultlib.test +++ b/lld/test/COFF/nodefaultlib.test @@ -1,5 +1,6 @@ -# RUN: cp %p/Inputs/hello64.obj %T -# RUN: cp %p/Inputs/std64.lib %T +# RUN: mkdir -p %t.dir +# RUN: cp %p/Inputs/hello64.obj %t.dir +# RUN: cp %p/Inputs/std64.lib %t.dir # RUN: not lld-link /out:%t.exe /entry:main /subsystem:console \ # RUN: hello64.obj /defaultlib:std64.lib >& %t.log @@ -9,12 +10,12 @@ # RUN: hello64 /defaultlib:std64.lib >& %t.log # RUN: FileCheck -DMSG=%errc_ENOENT -check-prefix=CHECK2 %s < %t.log -# RUN: lld-link /libpath:%T /out:%t.exe /entry:main \ +# RUN: lld-link /libpath:%t.dir /out:%t.exe /entry:main \ # RUN: /subsystem:console hello64.obj /defaultlib:std64.lib \ # RUN: /nodefaultlib:std64.lib >& %t.log || true # RUN: FileCheck -check-prefix=CHECK3 %s < %t.log -# RUN: lld-link /libpath:%T /out:%t.exe /entry:main \ +# RUN: lld-link /libpath:%t.dir /out:%t.exe /entry:main \ # RUN: /subsystem:console hello64.obj /defaultlib:std64 \ # RUN: /nodefaultlib:std64.lib >& %t.log || true # RUN: FileCheck -check-prefix=CHECK3 %s < %t.log @@ -24,10 +25,10 @@ CHECK2: error: could not open 'hello64': [[MSG]] CHECK3: error: undefined symbol: MessageBoxA CHECK3-NEXT: >>> referenced by {{.*}}hello64.obj:(main) -# RUN: lld-link /libpath:%T /out:%t.exe /entry:main \ +# RUN: lld-link /libpath:%t.dir /out:%t.exe /entry:main \ # RUN: /subsystem:console hello64.obj /defaultlib:std64.lib -# RUN: env LIB=%T lld-link /out:%t.exe /entry:main \ +# RUN: env LIB=%t.dir lld-link /out:%t.exe /entry:main \ # RUN: /subsystem:console hello64.obj /defaultlib:std64.lib MSVC stamps uppercase references in OBJ directives, thus ensure that passing lowercase 'libcmt' and 'oldnames' to /nodefaultlib works. @@ -37,11 +38,11 @@ MSVC stamps uppercase references in OBJ directives, thus ensure that passing low UPPERCASE-NOT: OLDNAMES UPPERCASE-NOT: LIBCMT -# RUN: yaml2obj -o %T/defaultlib.obj %p/Inputs/defaultlib.yaml +# RUN: yaml2obj -o %t.dir/defaultlib.obj %p/Inputs/defaultlib.yaml # RUN: mkdir -p %t.dir/sysroot/VC/Tools/MSVC/1.1.1.1/lib/x64 # RUN: cp %p/Inputs/ret42.lib %t.dir/sysroot/VC/Tools/MSVC/1.1.1.1/lib/x64/default.lib -# RUN: lld-link /winsysroot:%t.dir/sysroot /out:%t.exe /entry:main /subsystem:console %T/defaultlib.obj -# RUN: not lld-link /winsysroot:%t.dir/sysroot /out:%t.exe /entry:main /subsystem:console /nodefaultlib:default.lib %T/defaultlib.obj 2>&1 | FileCheck -check-prefix=CHECK4 %s +# RUN: lld-link /winsysroot:%t.dir/sysroot /out:%t.exe /entry:main /subsystem:console %t.dir/defaultlib.obj +# RUN: not lld-link /winsysroot:%t.dir/sysroot /out:%t.exe /entry:main /subsystem:console /nodefaultlib:default.lib %t.dir/defaultlib.obj 2>&1 | FileCheck -check-prefix=CHECK4 %s CHECK4: error: : undefined symbol: main diff --git a/lld/test/COFF/pdb-options.test b/lld/test/COFF/pdb-options.test index 70f6cbf501618..840040e224e53 100644 --- a/lld/test/COFF/pdb-options.test +++ b/lld/test/COFF/pdb-options.test @@ -19,8 +19,10 @@ ; If /DEBUG is specified but not /pdb, it uses a default name in the current ; directory. This is a bit hacky since but we need to be IN our test specific ; temporary directory when we run this command or we can't test this -# RUN: cd %T -# RUN: lld-link /DEBUG /entry:main /nodefaultlib %t1.obj %t2.obj -# RUN: ls %t1.pdb -# RUN: rm %t* -# RUN: cd %T/.. +# RUN: mkdir -p %t.dir +# RUN: cp %t1.obj %t.dir/1.obj +# RUN: cp %t2.obj %t.dir/2.obj +# RUN: cd %t.dir +# RUN: lld-link /DEBUG /entry:main /nodefaultlib %t.dir/1.obj %t.dir/2.obj +# RUN: ls %t.dir/1.pdb +# RUN: rm -r %t* diff --git a/lld/test/COFF/pdb-type-server-invalid-signature.yaml b/lld/test/COFF/pdb-type-server-invalid-signature.yaml index 8f1528ff1a89c..3cbc4ec7c27bd 100644 --- a/lld/test/COFF/pdb-type-server-invalid-signature.yaml +++ b/lld/test/COFF/pdb-type-server-invalid-signature.yaml @@ -20,7 +20,6 @@ # Test an invalid path reference to a PDB type server; as a fallback LLD should try to load the PDB in the same path as the OBJ # RUN: yaml2obj %S/Inputs/pdb-type-server-invalid-path.yaml -o %t3.obj -# RUN: cp %S/Inputs/pdb-diff-cl.pdb %T # RUN: lld-link %t3.obj -out:%t3.exe -debug -pdb:%t3.pdb -nodefaultlib -entry:main 2>&1 | FileCheck -DMSG=%errc_ENOENT %s -check-prefix=INVALID-PATH -allow-empty # INVALID-PATH-NOT: warning: Cannot use debug info for '{{.*}}3.obj' [LNK4099] diff --git a/lld/test/COFF/wrap-lto-2.ll b/lld/test/COFF/wrap-lto-2.ll index c50feab7f23f9..4c74ff2246e0f 100644 --- a/lld/test/COFF/wrap-lto-2.ll +++ b/lld/test/COFF/wrap-lto-2.ll @@ -23,28 +23,30 @@ ;; the wrapped symbol, when LTO or ThinLTO is involved. It checks for various ;; combinations of bitcode and regular objects. +; RUN: mkdir -p %t.dir + ;; LTO + LTO -; RUN: lld-link -out:%t.bc-bc.exe %t.main.bc -libpath:%T %t.bc.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps +; RUN: lld-link -out:%t.bc-bc.exe %t.main.bc -libpath:%t.dir %t.bc.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps ; RUN: llvm-objdump -d %t.bc-bc.exe | FileCheck %s --check-prefixes=CHECK,JMP ;; LTO + Object -; RUN: lld-link -out:%t.bc-obj.exe %t.main.bc -libpath:%T %t.obj.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps +; RUN: lld-link -out:%t.bc-obj.exe %t.main.bc -libpath:%t.dir %t.obj.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps ; RUN: llvm-objdump -d %t.bc-obj.exe | FileCheck %s --check-prefixes=CHECK,JMP ;; Object + LTO -; RUN: lld-link -out:%t.obj-bc.exe %t.main.obj -libpath:%T %t.bc.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps +; RUN: lld-link -out:%t.obj-bc.exe %t.main.obj -libpath:%t.dir %t.bc.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps ; RUN: llvm-objdump -d %t.obj-bc.exe | FileCheck %s --check-prefixes=CHECK,CALL ;; ThinLTO + ThinLTO -; RUN: lld-link -out:%t.thin-thin.exe %t.main.thin -libpath:%T %t.thin.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps +; RUN: lld-link -out:%t.thin-thin.exe %t.main.thin -libpath:%t.dir %t.thin.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps ; RUN: llvm-objdump -d %t.thin-thin.exe | FileCheck %s --check-prefixes=CHECK,JMP ;; ThinLTO + Object -; RUN: lld-link -out:%t.thin-obj.exe %t.main.thin -libpath:%T %t.obj.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps +; RUN: lld-link -out:%t.thin-obj.exe %t.main.thin -libpath:%t.dir %t.obj.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps ; RUN: llvm-objdump -d %t.thin-obj.exe | FileCheck %s --check-prefixes=CHECK,JMP ;; Object + ThinLTO -; RUN: lld-link -out:%t.obj-thin.exe %t.main.obj -libpath:%T %t.thin.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps +; RUN: lld-link -out:%t.obj-thin.exe %t.main.obj -libpath:%t.dir %t.thin.lib -entry:entry -subsystem:console -wrap:bar -debug:symtab -lldsavetemps ; RUN: llvm-objdump -d %t.obj-thin.exe | FileCheck %s --check-prefixes=CHECK,CALL ;; Make sure that calls in entry() are not eliminated and that bar is diff --git a/lld/test/COFF/wrap-with-archive.s b/lld/test/COFF/wrap-with-archive.s index 96b244a65a45c..d8a4fdb4ba04a 100644 --- a/lld/test/COFF/wrap-with-archive.s +++ b/lld/test/COFF/wrap-with-archive.s @@ -6,7 +6,8 @@ // RUN: rm -f %t.lib // RUN: llvm-ar rcs %t.lib %t.wrap.obj %t.other.obj -// RUN: lld-link -out:%t.exe %t.main.obj -libpath:%T %t.lib -entry:entry -subsystem:console -wrap:foo +// RUN: mkdir -p %t.dir +// RUN: lld-link -out:%t.exe %t.main.obj -libpath:%t.dir %t.lib -entry:entry -subsystem:console -wrap:foo // Note: No real definition of foo exists here, but that works fine as long // as there's no actual references to __real_foo. diff --git a/lld/test/wasm/lto/save-temps.ll b/lld/test/wasm/lto/save-temps.ll index 773978ef01f8c..e5e96d3c68664 100644 --- a/lld/test/wasm/lto/save-temps.ll +++ b/lld/test/wasm/lto/save-temps.ll @@ -1,4 +1,5 @@ -; RUN: cd %T +; RUN: mkdir -p %t.dir +; RUN: cd %t.dir ; RUN: rm -f a.out a.out.lto.bc a.out.lto.o ; RUN: llvm-as %s -o %t.o ; RUN: llvm-as %p/Inputs/save-temps.ll -o %t2.o diff --git a/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test b/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test index 95737e5d545af..f66c7b02cc22d 100644 --- a/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test +++ b/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test @@ -1,4 +1,5 @@ # RUN: llvm-exegesis -mode=analysis -benchmarks-file=%s -analysis-clusters-output-file=- -analysis-numpoints=1 | FileCheck %s +# RUN: echo "%T" > /tmp/blah2 # CHECK: cluster_id,opcode_name,config,sched_class,HWPort0,HWPort1,HWPort2,HWPort3,HWPort4,HWPort5,HWPort6,HWPort7,NumMicroOps # CHECK-NEXT: vzeroall From 0f4831efdc33f5943c28705e8c67729956936378 Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Sat, 26 Jul 2025 06:19:42 +0000 Subject: [PATCH 2/3] revert bad diff --- llvm/test/tools/llvm-exegesis/X86/analysis-uops.test | 1 - 1 file changed, 1 deletion(-) diff --git a/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test b/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test index f66c7b02cc22d..95737e5d545af 100644 --- a/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test +++ b/llvm/test/tools/llvm-exegesis/X86/analysis-uops.test @@ -1,5 +1,4 @@ # RUN: llvm-exegesis -mode=analysis -benchmarks-file=%s -analysis-clusters-output-file=- -analysis-numpoints=1 | FileCheck %s -# RUN: echo "%T" > /tmp/blah2 # CHECK: cluster_id,opcode_name,config,sched_class,HWPort0,HWPort1,HWPort2,HWPort3,HWPort4,HWPort5,HWPort6,HWPort7,NumMicroOps # CHECK-NEXT: vzeroall From 1023f8d4acd5775c5e3cd537ebbac331f201da2b Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Sat, 26 Jul 2025 06:41:25 +0000 Subject: [PATCH 3/3] Fix test --- lld/test/COFF/pdb-type-server-invalid-signature.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lld/test/COFF/pdb-type-server-invalid-signature.yaml b/lld/test/COFF/pdb-type-server-invalid-signature.yaml index 3cbc4ec7c27bd..aedcefa33225c 100644 --- a/lld/test/COFF/pdb-type-server-invalid-signature.yaml +++ b/lld/test/COFF/pdb-type-server-invalid-signature.yaml @@ -19,8 +19,10 @@ # VALID-SIGNATURE-NOT: The signature does not match; the file(s) might be out of date # Test an invalid path reference to a PDB type server; as a fallback LLD should try to load the PDB in the same path as the OBJ -# RUN: yaml2obj %S/Inputs/pdb-type-server-invalid-path.yaml -o %t3.obj -# RUN: lld-link %t3.obj -out:%t3.exe -debug -pdb:%t3.pdb -nodefaultlib -entry:main 2>&1 | FileCheck -DMSG=%errc_ENOENT %s -check-prefix=INVALID-PATH -allow-empty +# RUN: mkdir -p %t.dir +# RUN: yaml2obj %S/Inputs/pdb-type-server-invalid-path.yaml -o %t.dir/3.obj +# RUN: cp %S/Inputs/pdb-diff-cl.pdb %t.dir/pdb-diff-cl.pdb +# RUN: lld-link %t.dir/3.obj -out:%t3.exe -debug -pdb:%t3.pdb -nodefaultlib -entry:main 2>&1 | FileCheck -DMSG=%errc_ENOENT %s -check-prefix=INVALID-PATH -allow-empty # INVALID-PATH-NOT: warning: Cannot use debug info for '{{.*}}3.obj' [LNK4099] # INVALID-PATH-NOT: failed to load reference 'c:\some_invalid_path_AABB98765\pdb-diff-cl.pdb': [[MSG]]