[clang] [clang][AMDGPU] Reject malformed target IDs with empty components (PR #196140)

Edward Nathan Varghese via cfe-commits cfe-commits at lists.llvm.org
Wed May 6 11:05:18 PDT 2026


https://github.com/edwardnvv57k created https://github.com/llvm/llvm-project/pull/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.

>From 51ab2a9116b89009597095fca77684d944a79671 Mon Sep 17 00:00:00 2001
From: Edward Nathan Varghese <edwardnvarghese at gmail.com>
Date: Wed, 6 May 2026 23:23:51 +0530
Subject: [PATCH] [clang][AMDGPU] Reject malformed target IDs with empty
 components

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.
---
 clang/lib/Basic/TargetID.cpp                 | 2 ++
 clang/test/Driver/amdgpu-invalid-target-id.s | 6 ++++++
 2 files changed, 8 insertions(+)

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..141768701309e 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