From ab7817a9b987ff84775861b79f6bb94d0c3092fa Mon Sep 17 00:00:00 2001 From: srividya sundaram Date: Fri, 13 Feb 2026 13:02:30 -0800 Subject: [PATCH 1/3] [Driver][NFC] Check pointer Arg before dereferencing. --- clang/lib/Driver/ToolChains/Clang.cpp | 30 ++++++++++++--------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index bc05d4ea10322..671294a42532c 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5993,33 +5993,29 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, options::OPT_no_offload_new_driver, false); Arg *SYCLSplitMode = Args.getLastArg(options::OPT_fsycl_device_code_split_EQ); + Arg *OffloadLTO = Args.getLastArg(options::OPT_foffload_lto, + options::OPT_foffload_lto_EQ); bool IsDeviceCodeSplitDisabled = SYCLSplitMode && StringRef(SYCLSplitMode->getValue()) == "off"; bool IsSYCLLTOSupported = JA.isDeviceOffloading(Action::OFK_SYCL) && IsUsingOffloadNewDriver; - if ((IsDeviceOffloadAction && - !JA.isDeviceOffloading(Action::OFK_OpenMP) && !Triple.isAMDGPU() && - !IsUsingOffloadNewDriver) || - (JA.isDeviceOffloading(Action::OFK_SYCL) && !IsSYCLLTOSupported)) { + if (((IsDeviceOffloadAction && + !JA.isDeviceOffloading(Action::OFK_OpenMP) && !Triple.isAMDGPU() && + !IsUsingOffloadNewDriver) || + (JA.isDeviceOffloading(Action::OFK_SYCL) && !IsSYCLLTOSupported)) && + OffloadLTO) { D.Diag(diag::err_drv_unsupported_opt_for_target) - << Args.getLastArg(options::OPT_foffload_lto, - options::OPT_foffload_lto_EQ) - ->getAsString(Args) - << Triple.getTriple(); + << OffloadLTO->getAsString(Args) << Triple.getTriple(); } else if (Triple.isNVPTX() && !IsRDCMode && - JA.isDeviceOffloading(Action::OFK_Cuda)) { + JA.isDeviceOffloading(Action::OFK_Cuda) && OffloadLTO) { D.Diag(diag::err_drv_unsupported_opt_for_language_mode) - << Args.getLastArg(options::OPT_foffload_lto, - options::OPT_foffload_lto_EQ) - ->getAsString(Args) - << "-fno-gpu-rdc"; + << OffloadLTO->getAsString(Args) << "-fno-gpu-rdc"; } else if (JA.isDeviceOffloading(Action::OFK_SYCL) && - IsDeviceCodeSplitDisabled && LTOMode == LTOK_Thin) { + IsDeviceCodeSplitDisabled && LTOMode == LTOK_Thin && + OffloadLTO) { D.Diag(diag::err_drv_sycl_thinlto_split_off) << SYCLSplitMode->getAsString(Args) - << Args.getLastArg(options::OPT_foffload_lto, - options::OPT_foffload_lto_EQ) - ->getAsString(Args); + << OffloadLTO->getAsString(Args); } else { assert(LTOMode == LTOK_Full || LTOMode == LTOK_Thin); CmdArgs.push_back(Args.MakeArgString( From 9941ebd933a0b6f85da561895439464841ef36eb Mon Sep 17 00:00:00 2001 From: srividya sundaram Date: Mon, 16 Feb 2026 14:34:24 -0800 Subject: [PATCH 2/3] Keep intel/llvm specific changes only in this patch. --- clang/lib/Driver/ToolChains/Clang.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 671294a42532c..6157a6f5c830f 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6002,14 +6002,19 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (((IsDeviceOffloadAction && !JA.isDeviceOffloading(Action::OFK_OpenMP) && !Triple.isAMDGPU() && !IsUsingOffloadNewDriver) || - (JA.isDeviceOffloading(Action::OFK_SYCL) && !IsSYCLLTOSupported)) && - OffloadLTO) { + (JA.isDeviceOffloading(Action::OFK_SYCL) && !IsSYCLLTOSupported))) { D.Diag(diag::err_drv_unsupported_opt_for_target) - << OffloadLTO->getAsString(Args) << Triple.getTriple(); + << Args.getLastArg(options::OPT_foffload_lto, + options::OPT_foffload_lto_EQ) + ->getAsString(Args) + << Triple.getTriple(); } else if (Triple.isNVPTX() && !IsRDCMode && - JA.isDeviceOffloading(Action::OFK_Cuda) && OffloadLTO) { + JA.isDeviceOffloading(Action::OFK_Cuda)) { D.Diag(diag::err_drv_unsupported_opt_for_language_mode) - << OffloadLTO->getAsString(Args) << "-fno-gpu-rdc"; + << Args.getLastArg(options::OPT_foffload_lto, + options::OPT_foffload_lto_EQ) + ->getAsString(Args) + << "-fno-gpu-rdc"; } else if (JA.isDeviceOffloading(Action::OFK_SYCL) && IsDeviceCodeSplitDisabled && LTOMode == LTOK_Thin && OffloadLTO) { From 4a42f4eb2edb8da95254d267dd74fe7ee9ef0cea Mon Sep 17 00:00:00 2001 From: srividya sundaram Date: Mon, 16 Feb 2026 14:39:00 -0800 Subject: [PATCH 3/3] Fix clang format. --- clang/lib/Driver/ToolChains/Clang.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 6157a6f5c830f..ff2db2b53782a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5999,10 +5999,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, SYCLSplitMode && StringRef(SYCLSplitMode->getValue()) == "off"; bool IsSYCLLTOSupported = JA.isDeviceOffloading(Action::OFK_SYCL) && IsUsingOffloadNewDriver; - if (((IsDeviceOffloadAction && - !JA.isDeviceOffloading(Action::OFK_OpenMP) && !Triple.isAMDGPU() && - !IsUsingOffloadNewDriver) || - (JA.isDeviceOffloading(Action::OFK_SYCL) && !IsSYCLLTOSupported))) { + if ((IsDeviceOffloadAction && + !JA.isDeviceOffloading(Action::OFK_OpenMP) && !Triple.isAMDGPU() && + !IsUsingOffloadNewDriver) || + (JA.isDeviceOffloading(Action::OFK_SYCL) && !IsSYCLLTOSupported)) { D.Diag(diag::err_drv_unsupported_opt_for_target) << Args.getLastArg(options::OPT_foffload_lto, options::OPT_foffload_lto_EQ)