[clang-linker-wrapper] Use MapVector to stabilize iteration order
DenseMap iteration order is not guaranteed to be deterministic.
Without the change, clang/test/Driver/linker-wrapper{,-libs}.c would
fail when `combineHashValue` changes (#95970).
This commit is contained in:
@@ -48,8 +48,8 @@ int bar() { return weak; }
|
||||
// RUN: --linker-path=/usr/bin/ld %t.a %t.o -o a.out 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=LIBRARY-RESOLVES
|
||||
|
||||
// LIBRARY-RESOLVES: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-RESOLVES: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70 {{.*}}.s {{.*}}.o
|
||||
// LIBRARY-RESOLVES: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
|
||||
//
|
||||
// Check that we extract a static library that defines a global visibile to the
|
||||
@@ -72,8 +72,8 @@ int bar() { return weak; }
|
||||
// RUN: --linker-path=/usr/bin/ld %t.a %t.o -o a.out 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=LIBRARY-GLOBAL
|
||||
|
||||
// LIBRARY-GLOBAL: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-GLOBAL: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70 {{.*}}.s {{.*}}.o
|
||||
// LIBRARY-GLOBAL: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
|
||||
//
|
||||
// Check that we do not extract a global symbol if the source file was not
|
||||
@@ -116,9 +116,9 @@ int bar() { return weak; }
|
||||
// RUN: --linker-path=/usr/bin/ld %t.o %t.a -o a.out 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=LIBRARY-WEAK
|
||||
|
||||
// LIBRARY-WEAK: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030
|
||||
// LIBRARY-WEAK-NOT: {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-WEAK: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70
|
||||
// LIBRARY-WEAK-NOT: {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-WEAK: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030
|
||||
|
||||
//
|
||||
// Check that we do not extract an unneeded hidden symbol.
|
||||
@@ -138,9 +138,9 @@ int bar() { return weak; }
|
||||
// RUN: --linker-path=/usr/bin/ld %t.o %t.a -o a.out 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=LIBRARY-HIDDEN
|
||||
|
||||
// LIBRARY-HIDDEN: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030
|
||||
// LIBRARY-HIDDEN-NOT: {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-HIDDEN: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70
|
||||
// LIBRARY-HIDDEN-NOT: {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-HIDDEN: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030
|
||||
|
||||
//
|
||||
// Check that we do not extract a static library that defines a global visibile
|
||||
@@ -161,9 +161,9 @@ int bar() { return weak; }
|
||||
// RUN: --linker-path=/usr/bin/ld %t.o %t.a %t.a -o a.out 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=LIBRARY-GLOBAL-DEFINED
|
||||
|
||||
// LIBRARY-GLOBAL-DEFINED: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-GLOBAL-DEFINED-NOT: {{.*}}gfx1030{{.*}}.o
|
||||
// LIBRARY-GLOBAL-DEFINED: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70 {{.*}}.s {{.*}}.o
|
||||
// LIBRARY-GLOBAL-DEFINED-NOT: {{.*}}gfx1030{{.*}}.o
|
||||
// LIBRARY-GLOBAL-DEFINED: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
|
||||
//
|
||||
// Check that we can use --[no-]whole-archive to control extraction.
|
||||
@@ -185,7 +185,7 @@ int bar() { return weak; }
|
||||
// RUN: --linker-path=/usr/bin/ld %t.o --whole-archive %t.a -o a.out 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=LIBRARY-WHOLE-ARCHIVE
|
||||
|
||||
// LIBRARY-WHOLE-ARCHIVE: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70 {{.*}}.s {{.*}}.o
|
||||
// LIBRARY-WHOLE-ARCHIVE: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx1030 {{.*}}.o {{.*}}.o
|
||||
// LIBRARY-WHOLE-ARCHIVE: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_52 {{.*}}.s
|
||||
// LIBRARY-WHOLE-ARCHIVE: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx90a {{.*}}.o
|
||||
// LIBRARY-WHOLE-ARCHIVE: clang{{.*}} -o {{.*}}.img --target=nvptx64-nvidia-cuda -march=sm_70 {{.*}}.s {{.*}}.o
|
||||
|
||||
@@ -91,8 +91,8 @@ __attribute__((visibility("protected"), used)) int x;
|
||||
// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu \
|
||||
// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=CUDA
|
||||
|
||||
// CUDA: clang{{.*}} -o [[IMG_SM52:.+]] --target=nvptx64-nvidia-cuda -march=sm_52
|
||||
// CUDA: clang{{.*}} -o [[IMG_SM70:.+]] --target=nvptx64-nvidia-cuda -march=sm_70
|
||||
// CUDA: clang{{.*}} -o [[IMG_SM52:.+]] --target=nvptx64-nvidia-cuda -march=sm_52
|
||||
// CUDA: fatbinary{{.*}}-64 --create {{.*}}.fatbin --image=profile=sm_70,file=[[IMG_SM70]] --image=profile=sm_52,file=[[IMG_SM52]]
|
||||
// CUDA: usr/bin/ld{{.*}} {{.*}}.openmp.image.{{.*}}.o {{.*}}.cuda.image.{{.*}}.o
|
||||
|
||||
@@ -118,8 +118,8 @@ __attribute__((visibility("protected"), used)) int x;
|
||||
// RUN: --compress --compression-level=6 \
|
||||
// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefix=HIP
|
||||
|
||||
// HIP: clang{{.*}} -o [[IMG_GFX908:.+]] --target=amdgcn-amd-amdhsa -mcpu=gfx908
|
||||
// HIP: clang{{.*}} -o [[IMG_GFX90A:.+]] --target=amdgcn-amd-amdhsa -mcpu=gfx90a
|
||||
// HIP: clang{{.*}} -o [[IMG_GFX908:.+]] --target=amdgcn-amd-amdhsa -mcpu=gfx908
|
||||
// HIP: clang-offload-bundler{{.*}}-type=o -bundle-align=4096 -compress -compression-level=6 -targets=host-x86_64-unknown-linux,hip-amdgcn-amd-amdhsa--gfx90a,hip-amdgcn-amd-amdhsa--gfx908 -input=/dev/null -input=[[IMG_GFX90A]] -input=[[IMG_GFX908]] -output={{.*}}.hipfb
|
||||
|
||||
// RUN: clang-offload-packager -o %t.out \
|
||||
@@ -186,8 +186,8 @@ __attribute__((visibility("protected"), used)) int x;
|
||||
// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run \
|
||||
// RUN: --linker-path=/usr/bin/ld %t1.o %t2.o %t.a -o a.out 2>&1 | FileCheck %s --check-prefix=ARCH-ALL
|
||||
|
||||
// ARCH-ALL: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx908 -O2 -Wl,--no-undefined {{.*}}.o {{.*}}.o
|
||||
// ARCH-ALL: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx90a -O2 -Wl,--no-undefined {{.*}}.o {{.*}}.o
|
||||
// ARCH-ALL: clang{{.*}} -o {{.*}}.img --target=amdgcn-amd-amdhsa -mcpu=gfx908 -O2 -Wl,--no-undefined {{.*}}.o {{.*}}.o
|
||||
|
||||
// RUN: clang-offload-packager -o %t.out \
|
||||
// RUN: --image=file=%t.elf.o,kind=openmp,triple=x86_64-unknown-linux-gnu \
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/Basic/Version.h"
|
||||
#include "llvm/ADT/MapVector.h"
|
||||
#include "llvm/BinaryFormat/Magic.h"
|
||||
#include "llvm/Bitcode/BitcodeWriter.h"
|
||||
#include "llvm/CodeGen/CommandFlags.h"
|
||||
@@ -1539,7 +1540,7 @@ getDeviceInput(const ArgList &Args) {
|
||||
}
|
||||
|
||||
// Link all standard input files and update the list of symbols.
|
||||
DenseMap<OffloadFile::TargetID, SmallVector<OffloadFile>> InputFiles;
|
||||
MapVector<OffloadFile::TargetID, SmallVector<OffloadFile, 0>> InputFiles;
|
||||
DenseMap<OffloadFile::TargetID, DenseMap<StringRef, Symbol>> Syms;
|
||||
for (OffloadFile &Binary : ObjectFilesToExtract) {
|
||||
if (!Binary.getBinary())
|
||||
|
||||
Reference in New Issue
Block a user