diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 565193f7807d4..c22281cd69d42 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -135,23 +135,18 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-defaultlib:oldnames"); } - if ((Args.hasArg(options::OPT_fsycl) && + if ((!C.getDriver().IsCLMode() && Args.hasArg(options::OPT_fsycl) && !Args.hasArg(options::OPT_nolibsycl)) || Args.hasArg(options::OPT_fsycl_host_compiler_EQ)) { CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") + TC.getDriver().Dir + "/../lib")); - if (!Args.hasArg(options::OPT__SLASH_MDd) && - !isDependentLibAdded(Args, "msvcrtd")) { + // When msvcrtd is added via --dependent-lib, we add the sycld + // equivalent. Do not add the -defaultlib as it conflicts. + if (!isDependentLibAdded(Args, "msvcrtd")) { if (Args.hasArg(options::OPT_fpreview_breaking_changes)) CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION "-preview.lib"); else CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION ".lib"); - } else { - if (Args.hasArg(options::OPT_fpreview_breaking_changes)) - CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION - "-previewd.lib"); - else - CmdArgs.push_back("-defaultlib:sycl" SYCL_MAJOR_VERSION "d.lib"); } CmdArgs.push_back("-defaultlib:sycl-devicelib-host.lib"); } diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 1d1eae5c10467..a49b48954b4c8 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -486,7 +486,7 @@ // RUN: %clang -fsycl -target x86_64-unknown-windows-msvc %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-SYCL %s // RUN: %clang_cl -fsycl %s -o %t -### 2>&1 | FileCheck -check-prefix=CHECK-LINK-SYCL-CL %s // CHECK-LINK-SYCL-CL: "--dependent-lib=sycl{{[0-9]*}}" -// CHECK-LINK-SYCL-CL: "-defaultlib:sycl{{[0-9]*}}.lib" +// CHECK-LINK-SYCL-CL-NOT: "-defaultlib:sycl{{[0-9]*}}.lib" // CHECK-LINK-SYCL: "-defaultlib:sycl{{[0-9]*}}.lib" /// Check no SYCL runtime is linked with -nolibsycl @@ -837,16 +837,3 @@ // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK: --dependent-lib=sycl{{[0-9]*}}-previewd // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}.lib // FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}-preview.lib - - -/// Check that at link step of "clang-cl -fsycl" we pull in sycl.lib even if at the compilation step sycl libraries were not provided (this is possible if user compiles manually without -fsycl by provided paths to the headers). -// RUN: %clang_cl -### -fsycl -nolibsycl -target x86_64-unknown-windows-msvc -c %s 2>&1 | FileCheck -check-prefix FSYCL-CL-COMPILE-NOLIBS-CHECK %s -// RUN: %clang_cl -### -fsycl %s 2>&1 | FileCheck -check-prefix FSYCL-CL-LINK-CHECK %s -// FSYCL-CL-COMPILE-NOLIBS-CHECK-NOT: "--dependent-lib=sycl{{[0-9]*}}" -// FSYCL-CL-LINK-CHECK: "-defaultlib:sycl{{[0-9]*}}.lib" - -/// Check that at link step of "clang-cl -fsycl /MDd" we pull in sycld.lib even if at the compilation step sycl libraries were not provided (this is possible if user compiles manually without -fsycl by provided paths to the headers). -// RUN: %clang_cl -### -fsycl -nolibsycl /MDd -target x86_64-unknown-windows-msvc -c %s 2>&1 | FileCheck -check-prefix FSYCL-CL-COMPILE-NOLIBS-MDd-CHECK %s -// RUN: %clang_cl -### -fsycl /MDd %s 2>&1 | FileCheck -check-prefix FSYCL-CL-LINK--MDd-CHECK %s -// FSYCL-CL-COMPILE-NOLIBS-MDd-CHECK-NOT: "--dependent-lib=sycl{{[0-9]*}}d" -// FSYCL-CL-LINK--MDd-CHECK: "-defaultlib:sycl{{[0-9]*}}d.lib"