================ @@ -6591,6 +6681,18 @@ const ToolChain &Driver::getOffloadingDeviceToolChain( HostTC, Args); break; } + case Action::OFK_SYCL: + switch (Target.getArch()) { + case llvm::Triple::spir: + case llvm::Triple::spir64: + case llvm::Triple::spirv32: + case llvm::Triple::spirv64: + TC = std::make_unique<toolchains::SYCLToolChain>(*this, Target, HostTC, + Args); + break; + default: + break; + } default: break; ---------------- tahonermann wrote:
The `assert()` at that location happens too late. C++ doesn't acknowledge the possibility of a null reference and attempting to construct one results in undefined behavior. A conforming compiler is allowed to assume that taking the address of a reference results in a non-null pointer and may thus elide any actual check for null as an always-false condition; a compiler can therefore conclude that `HIPTC` is always non-null in `assert(HIPTC && ...)` without actually checking. The fix that is actually needed is to `assert(TC && "Could not create offloading device tool chain.")` below before the return of `*TC`. The `assert(HIPTC && ...)` and added `assert(SYCLTC && ...)` statements can then be removed. https://github.com/llvm/llvm-project/pull/117268 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits