[clang] d1f0d1b - [clang][AMDGPU] Reject malformed target IDs with empty components (#196140)
via cfe-commits
cfe-commits at lists.llvm.org
Sat May 9 00:00:57 PDT 2026
Author: Edward Nathan Varghese
Date: 2026-05-09T07:00:52Z
New Revision: d1f0d1b37eb77c64c9a54479ad339e22f9b80c1e
URL: https://github.com/llvm/llvm-project/commit/d1f0d1b37eb77c64c9a54479ad339e22f9b80c1e
DIFF: https://github.com/llvm/llvm-project/commit/d1f0d1b37eb77c64c9a54479ad339e22f9b80c1e.diff
LOG: [clang][AMDGPU] Reject malformed target IDs with empty components (#196140)
Fixes #196078
An extra colon in `-mcpu` (e.g. `gfx900::xnack+`) produced an empty
feature component and triggered an assertion in `StringRef::back()`.
Return `std::nullopt` for malformed target IDs instead.
Added:
Modified:
clang/lib/Basic/TargetID.cpp
clang/test/Driver/amdgpu-invalid-target-id.s
Removed:
################################################################################
diff --git a/clang/lib/Basic/TargetID.cpp b/clang/lib/Basic/TargetID.cpp
index 0aca490e17903..446577930b017 100644
--- a/clang/lib/Basic/TargetID.cpp
+++ b/clang/lib/Basic/TargetID.cpp
@@ -89,6 +89,8 @@ parseTargetIDWithFormatCheckingOnly(llvm::StringRef TargetID,
while (!Features.empty()) {
auto Splits = Features.split(':');
+ if (Splits.first.empty())
+ return std::nullopt;
auto Sign = Splits.first.back();
auto Feature = Splits.first.drop_back();
if (Sign != '+' && Sign != '-')
diff --git a/clang/test/Driver/amdgpu-invalid-target-id.s b/clang/test/Driver/amdgpu-invalid-target-id.s
index 7d1d8e4772338..4fe5493a3e6bb 100644
--- a/clang/test/Driver/amdgpu-invalid-target-id.s
+++ b/clang/test/Driver/amdgpu-invalid-target-id.s
@@ -39,3 +39,9 @@
// RUN: %s 2>&1 | FileCheck -check-prefix=NOCOLON %s
// NOCOLON: error: invalid target ID 'gfx900+xnack'
+
+// RUN: not %clang --target=amdgcn-amd-amdhsa \
+// RUN: -mcpu=gfx900::xnack+ -nostdlib \
+// RUN: %s 2>&1 | FileCheck -check-prefix=EXTRACOL %s
+
+// EXTRACOL: error: invalid target ID 'gfx900::xnack+'
More information about the cfe-commits
mailing list