Skip to content

Commit cbd6b7c

Browse files
AllanZynezhaomaosukbenzie
authored
[DeviceMSAN] Support MemorySanitizer for device offloading (#15955)
UR: oneapi-src/unified-runtime#2325 --------- Co-authored-by: Zhao, Maosu <[email protected]> Co-authored-by: Kenneth Benzie (Benie) <[email protected]>
1 parent 33ee738 commit cbd6b7c

File tree

28 files changed

+1112
-123
lines changed

28 files changed

+1112
-123
lines changed

clang/lib/Driver/OffloadBundler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ class ObjectFileHandler final : public FileHandler {
692692
if (SF->isIR() &&
693693
(Name == "llvm.used" || Name == "llvm.compiler.used" ||
694694
Name == "__AsanDeviceGlobalMetadata" ||
695-
Name == "__AsanKernelMetadata"))
695+
Name == "__AsanKernelMetadata" || Name == "__MsanKernelMetadata"))
696696
continue;
697697

698698
// Add symbol name with the target prefix to the buffer.

clang/lib/Driver/SanitizerArgs.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,7 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
11691169
// SPIR/SPIRV sanitizer support is experimental and will pass a fixed set of
11701170
// flags
11711171
if (TC.getTriple().isSPIROrSPIRV()) {
1172+
#if !defined(_WIN32)
11721173
if (Sanitizers.has(SanitizerKind::Address)) {
11731174
CmdArgs.push_back("-fsanitize=address");
11741175
CmdArgs.push_back("-fsanitize-address-use-after-return=never");
@@ -1200,7 +1201,26 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
12001201

12011202
addSpecialCaseListOpt(Args, CmdArgs,
12021203
"-fsanitize-ignorelist=", UserIgnorelistFiles);
1204+
} else if (Sanitizers.has(SanitizerKind::Memory)) {
1205+
CmdArgs.push_back("-fsanitize=memory");
1206+
1207+
CmdArgs.push_back("-mllvm");
1208+
CmdArgs.push_back("-msan-instrumentation-with-call-threshold=0");
1209+
1210+
CmdArgs.push_back("-mllvm");
1211+
CmdArgs.push_back("-msan-eager-checks=1");
12031212
}
1213+
#else // _WIN32
1214+
std::string SanitizeArg;
1215+
if (Sanitizers.has(SanitizerKind::Address))
1216+
SanitizeArg = "-fsanitize=address";
1217+
else if (Sanitizers.has(SanitizerKind::Memory))
1218+
SanitizeArg = "-fsanitize=memory";
1219+
1220+
if (!SanitizeArg.empty())
1221+
TC.getDriver().Diag(diag::warn_drv_unsupported_option_for_target)
1222+
<< SanitizeArg << TC.getTripleString();
1223+
#endif
12041224
return;
12051225
}
12061226

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@ SYCL::getDeviceLibraries(const Compilation &C, const llvm::Triple &TargetTriple,
555555
{"libsycl-asan-cpu", "internal"},
556556
{"libsycl-asan-dg2", "internal"},
557557
{"libsycl-asan-pvc", "internal"}};
558+
const SYCLDeviceLibsList SYCLDeviceMsanLibs = {{"libsycl-msan", "internal"}};
558559
#endif
559560

560561
const SYCLDeviceLibsList SYCLNativeCpuDeviceLibs = {
@@ -670,12 +671,15 @@ SYCL::getDeviceLibraries(const Compilation &C, const llvm::Triple &TargetTriple,
670671
};
671672

672673
std::string SanitizeVal;
674+
std::string SanitizeArg;
673675
size_t sanitizer_lib_idx = getSingleBuildTarget();
674676
if (Arg *A = Args.getLastArg(options::OPT_fsanitize_EQ,
675677
options::OPT_fno_sanitize_EQ)) {
676678
if (A->getOption().matches(options::OPT_fsanitize_EQ) &&
677-
A->getValues().size() == 1)
679+
A->getValues().size() == 1) {
678680
SanitizeVal = A->getValue();
681+
SanitizeArg = A->getAsString(Args);
682+
}
679683
} else {
680684
// User can pass -fsanitize=address to device compiler via
681685
// -Xsycl-target-frontend, sanitize device library must be
@@ -699,14 +703,21 @@ SYCL::getDeviceLibraries(const Compilation &C, const llvm::Triple &TargetTriple,
699703
for (const std::string &Arg : ArgVals) {
700704
if (Arg.find("-fsanitize=address") != std::string::npos) {
701705
SanitizeVal = "address";
706+
SanitizeArg = Arg;
707+
break;
708+
}
709+
if (Arg.find("-fsanitize=memory") != std::string::npos) {
710+
SanitizeVal = "memory";
711+
SanitizeArg = Arg;
702712
break;
703713
}
704714
}
705715
}
706716

707717
if (SanitizeVal == "address")
708718
addSingleLibrary(SYCLDeviceAsanLibs[sanitizer_lib_idx]);
709-
719+
else if (SanitizeVal == "memory")
720+
addLibraries(SYCLDeviceMsanLibs);
710721
#endif
711722

712723
if (isNativeCPU)
@@ -826,6 +837,7 @@ static llvm::SmallVector<StringRef, 16> SYCLDeviceLibList{
826837
"asan-pvc",
827838
"asan-cpu",
828839
"asan-dg2",
840+
"msan",
829841
#endif
830842
"imf",
831843
"imf-fp64",
@@ -1665,11 +1677,11 @@ SYCLToolChain::SYCLToolChain(const Driver &D, const llvm::Triple &Triple,
16651677
if (SupportedByNativeCPU(*this, Opt))
16661678
continue;
16671679
// All sanitizer options are not currently supported, except
1668-
// AddressSanitizer
1680+
// AddressSanitizer and MemorySanitizer
16691681
if (A->getOption().getID() == options::OPT_fsanitize_EQ &&
16701682
A->getValues().size() == 1) {
16711683
std::string SanitizeVal = A->getValue();
1672-
if (SanitizeVal == "address")
1684+
if (SanitizeVal == "address" || SanitizeVal == "memory")
16731685
continue;
16741686
}
16751687
D.Diag(clang::diag::warn_drv_unsupported_option_for_target)
@@ -1710,7 +1722,7 @@ SYCLToolChain::TranslateArgs(const llvm::opt::DerivedArgList &Args,
17101722
if (Opt.getID() == options::OPT_fsanitize_EQ &&
17111723
A->getValues().size() == 1) {
17121724
std::string SanitizeVal = A->getValue();
1713-
if (SanitizeVal == "address") {
1725+
if (SanitizeVal == "address" || SanitizeVal == "memory") {
17141726
if (IsNewDAL)
17151727
DAL->append(A);
17161728
continue;
@@ -2119,5 +2131,5 @@ void SYCLToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &Args,
21192131
}
21202132

21212133
SanitizerMask SYCLToolChain::getSupportedSanitizers() const {
2122-
return SanitizerKind::Address;
2134+
return SanitizerKind::Address | SanitizerKind::Memory;
21232135
}

clang/test/Driver/sycl-device-lib-old-model.cpp

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -198,35 +198,35 @@
198198
/// ###########################################################################
199199
/// test behavior of libsycl-asan.bc linking when -fsanitize=address is available
200200
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -fsanitize=address -### 2>&1 \
201-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
201+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
202202
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend -fsanitize=address -### 2>&1 \
203-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
203+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
204204
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend=spir64 -fsanitize=address -### 2>&1 \
205-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
205+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
206206
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device -fsanitize=address -### 2>&1 \
207-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
207+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
208208
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=address -DUSE_SYCL_DEVICE_ASAN" -### 2>&1 \
209-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
209+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
210210
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=address -DUSE_SYCL_DEVICE_ASAN" -### 2>&1 \
211211
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_ASAN_MACRO
212-
// SYCL_DEVICE_LIB_SANITIZER: llvm-link{{.*}} "{{.*}}libsycl-crt.bc"
213-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-complex.bc"
214-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-complex-fp64.bc"
215-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-cmath.bc"
216-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-cmath-fp64.bc"
217-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-imf.bc"
218-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-imf-fp64.bc"
219-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-imf-bf16.bc"
220-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-cassert.bc"
221-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-cstring.bc"
222-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-complex.bc"
223-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-complex-fp64.bc"
224-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-cmath.bc"
225-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-cmath-fp64.bc"
226-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-imf.bc"
227-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-imf-fp64.bc"
228-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-fallback-imf-bf16.bc"
229-
// SYCL_DEVICE_LIB_SANITIZER-SAME: "{{.*}}libsycl-asan.bc"
212+
// SYCL_DEVICE_LIB_ASAN: llvm-link{{.*}} "{{.*}}libsycl-crt.bc"
213+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-complex.bc"
214+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-complex-fp64.bc"
215+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-cmath.bc"
216+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-cmath-fp64.bc"
217+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-imf.bc"
218+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-imf-fp64.bc"
219+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-imf-bf16.bc"
220+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-cassert.bc"
221+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-cstring.bc"
222+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-complex.bc"
223+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-complex-fp64.bc"
224+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-cmath.bc"
225+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-cmath-fp64.bc"
226+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-imf.bc"
227+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-imf-fp64.bc"
228+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-fallback-imf-bf16.bc"
229+
// SYCL_DEVICE_LIB_ASAN-SAME: "{{.*}}libsycl-asan.bc"
230230
// SYCL_DEVICE_ASAN_MACRO: "-cc1"
231231
// SYCL_DEVICE_ASAN_MACRO-SAME: "USE_SYCL_DEVICE_ASAN"
232232
// SYCL_DEVICE_ASAN_MACRO: llvm-link{{.*}} "-only-needed"
@@ -317,3 +317,41 @@
317317
// SYCL_DEVICE_LIB_ASAN_DG2-SAME: "{{.*}}libsycl-fallback-imf-fp64.bc"
318318
// SYCL_DEVICE_LIB_ASAN_DG2-SAME: "{{.*}}libsycl-fallback-imf-bf16.bc"
319319
// SYCL_DEVICE_LIB_ASAN_DG2-SAME: "{{.*}}libsycl-asan-dg2.bc"
320+
321+
322+
/// ###########################################################################
323+
/// test behavior of libsycl-msan.bc linking when -fsanitize=memory is available
324+
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -fsanitize=memory -### 2>&1 \
325+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
326+
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend -fsanitize=memory -### 2>&1 \
327+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
328+
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend=spir64 -fsanitize=memory -### 2>&1 \
329+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
330+
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device -fsanitize=memory -### 2>&1 \
331+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
332+
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=memory -DUSE_SYCL_DEVICE_MSAN" -### 2>&1 \
333+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
334+
// RUN: %clangxx -fsycl --no-offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=memory -DUSE_SYCL_DEVICE_MSAN" -### 2>&1 \
335+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_MSAN_MACRO
336+
// SYCL_DEVICE_LIB_MSAN: llvm-link{{.*}} "{{.*}}libsycl-crt.bc"
337+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-complex.bc"
338+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-complex-fp64.bc"
339+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-cmath.bc"
340+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-cmath-fp64.bc"
341+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-imf.bc"
342+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-imf-fp64.bc"
343+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-imf-bf16.bc"
344+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-cassert.bc"
345+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-cstring.bc"
346+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-complex.bc"
347+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-complex-fp64.bc"
348+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-cmath.bc"
349+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-cmath-fp64.bc"
350+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-imf.bc"
351+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-imf-fp64.bc"
352+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-fallback-imf-bf16.bc"
353+
// SYCL_DEVICE_LIB_MSAN-SAME: "{{.*}}libsycl-msan.bc"
354+
// SYCL_DEVICE_MSAN_MACRO: "-cc1"
355+
// SYCL_DEVICE_MSAN_MACRO-SAME: "USE_SYCL_DEVICE_MSAN"
356+
// SYCL_DEVICE_MSAN_MACRO: llvm-link{{.*}} "-only-needed"
357+
// SYCL_DEVICE_MSAN_MACRO-SAME: "{{.*}}libsycl-msan.bc"

clang/test/Driver/sycl-device-lib.cpp

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -155,36 +155,36 @@
155155
/// ###########################################################################
156156
/// test behavior of libsycl-asan.o linking when -fsanitize=address is available
157157
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -fsanitize=address -### 2>&1 \
158-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
158+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
159159
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend -fsanitize=address -### 2>&1 \
160-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
160+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
161161
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend=spir64 -fsanitize=address -### 2>&1 \
162-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
162+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
163163
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device -fsanitize=address -### 2>&1 \
164-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
164+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
165165
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=address -DUSE_SYCL_DEVICE_ASAN" -### 2>&1 \
166-
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
166+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_ASAN
167167
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=address -DUSE_SYCL_DEVICE_ASAN" -### 2>&1 \
168168
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_ASAN_MACRO
169-
// SYCL_DEVICE_LIB_SANITIZER: clang-linker-wrapper{{.*}} "-sycl-device-libraries
170-
// SYCL_DEVICE_LIB_SANITIZER: {{.*}}libsycl-crt.new.o
171-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-complex.
172-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-complex-fp64.
173-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-cmath.new.o
174-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-cmath-fp64.new.o
175-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-imf.new.o
176-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-imf-fp64.new.o
177-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-imf-bf16.new.o
178-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-cassert.new.o
179-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-cstring.new.o
180-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-complex.new.o
181-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-complex-fp64.new.o
182-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-cmath.new.o
183-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-cmath-fp64.new.o
184-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-imf.new.o
185-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-imf-fp64.new.o
186-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-fallback-imf-bf16.new.o
187-
// SYCL_DEVICE_LIB_SANITIZER-SAME: {{.*}}libsycl-asan.new.o
169+
// SYCL_DEVICE_LIB_ASAN: clang-linker-wrapper{{.*}} "-sycl-device-libraries
170+
// SYCL_DEVICE_LIB_ASAN: {{.*}}libsycl-crt.new.o
171+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-complex.
172+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-complex-fp64.
173+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-cmath.new.o
174+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-cmath-fp64.new.o
175+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-imf.new.o
176+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-imf-fp64.new.o
177+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-imf-bf16.new.o
178+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-cassert.new.o
179+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-cstring.new.o
180+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-complex.new.o
181+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-complex-fp64.new.o
182+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-cmath.new.o
183+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-cmath-fp64.new.o
184+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-imf.new.o
185+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-imf-fp64.new.o
186+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-fallback-imf-bf16.new.o
187+
// SYCL_DEVICE_LIB_ASAN-SAME: {{.*}}libsycl-asan.new.o
188188
// SYCL_DEVICE_ASAN_MACRO: "-cc1"
189189
// SYCL_DEVICE_ASAN_MACRO-SAME: "USE_SYCL_DEVICE_ASAN"
190190
// SYCL_DEVICE_ASAN_MACRO: libsycl-asan.new.o
@@ -314,3 +314,41 @@
314314
// SYCL_DEVICE_LIB_ASAN_MUL-SAME: {{.*}}libsycl-fallback-imf-fp64.new.o
315315
// SYCL_DEVICE_LIB_ASAN_MUL-SAME: {{.*}}libsycl-fallback-imf-bf16.new.o
316316
// SYCL_DEVICE_LIB_ASAN_MUL-SAME: {{.*}}libsycl-asan.new.o
317+
318+
319+
/// ###########################################################################
320+
/// test behavior of libsycl-msan.o linking when -fsanitize=memory is available
321+
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -fsanitize=memory -### 2>&1 \
322+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
323+
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend -fsanitize=memory -### 2>&1 \
324+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
325+
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend=spir64 -fsanitize=memory -### 2>&1 \
326+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
327+
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device -fsanitize=memory -### 2>&1 \
328+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
329+
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=memory -DUSE_SYCL_DEVICE_MSAN" -### 2>&1 \
330+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_MSAN
331+
// RUN: %clangxx -fsycl --offload-new-driver %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=memory -DUSE_SYCL_DEVICE_MSAN" -### 2>&1 \
332+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_MSAN_MACRO
333+
// SYCL_DEVICE_LIB_MSAN: clang-linker-wrapper{{.*}} "-sycl-device-libraries
334+
// SYCL_DEVICE_LIB_MSAN: {{.*}}libsycl-crt.new.o
335+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-complex.
336+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-complex-fp64.
337+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-cmath.new.o
338+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-cmath-fp64.new.o
339+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-imf.new.o
340+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-imf-fp64.new.o
341+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-imf-bf16.new.o
342+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-cassert.new.o
343+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-cstring.new.o
344+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-complex.new.o
345+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-complex-fp64.new.o
346+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-cmath.new.o
347+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-cmath-fp64.new.o
348+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-imf.new.o
349+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-imf-fp64.new.o
350+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-fallback-imf-bf16.new.o
351+
// SYCL_DEVICE_LIB_MSAN-SAME: {{.*}}libsycl-msan.new.o
352+
// SYCL_DEVICE_MSAN_MACRO: "-cc1"
353+
// SYCL_DEVICE_MSAN_MACRO-SAME: "USE_SYCL_DEVICE_MSAN"
354+
// SYCL_DEVICE_MSAN_MACRO: libsycl-msan.new.o

0 commit comments

Comments
 (0)