https://github.com/tadeuszjt updated 
https://github.com/llvm/llvm-project/pull/220004

>From 9c19d285b117db5e576798d0ff817b52131215d7 Mon Sep 17 00:00:00 2001
From: Tadeusz Tomoszek <[email protected]>
Date: Mon, 31 Aug 2026 17:02:12 +0200
Subject: [PATCH] [Clang] Fix Crash in Sema::DiagnoseUnguardedAvailability On
 'if' With No Condition

---
 clang/docs/ReleaseNotes.md               |  2 ++
 clang/lib/Sema/SemaAvailability.cpp      |  6 +++++-
 clang/test/SemaCXX/attr-availability.cpp | 10 ++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md
index 512b1d1d3be01..24a33a8c90f63 100644
--- a/clang/docs/ReleaseNotes.md
+++ b/clang/docs/ReleaseNotes.md
@@ -582,6 +582,8 @@ features cannot lower the translation-unit ABI level;
   threshold to the target's `size_t` width instead of using a fixed
   threshold of `1 << 60` regardless of the target.
 - Fixed a crash when generating fake uses for parameters of bodyless 
destructors with `-fextend-variable-liveness`.
+- Fixed `DiagnoseUnguardedAvailability::TraverseIfStmt` dereferencing a nullptr
+  on `if consteval {}`. (#GH220004)
 
 ### OpenACC Specific Changes
 
diff --git a/clang/lib/Sema/SemaAvailability.cpp 
b/clang/lib/Sema/SemaAvailability.cpp
index 28a4b760dbd4d..91a1a3e6842bb 100644
--- a/clang/lib/Sema/SemaAvailability.cpp
+++ b/clang/lib/Sema/SemaAvailability.cpp
@@ -1068,7 +1068,11 @@ ExtractedAvailabilityExpr extractAvailabilityExpr(const 
Expr *IfCond) {
 }
 
 bool DiagnoseUnguardedAvailability::TraverseIfStmt(IfStmt *If) {
-  ExtractedAvailabilityExpr IfCond = extractAvailabilityExpr(If->getCond());
+  Expr *Cond = If->getCond();
+  if (!Cond)
+    return DynamicRecursiveASTVisitor::TraverseIfStmt(If);
+
+  ExtractedAvailabilityExpr IfCond = extractAvailabilityExpr(Cond);
   if (!IfCond.E) {
     // This isn't an availability checking 'if', we can just continue.
     return DynamicRecursiveASTVisitor::TraverseIfStmt(If);
diff --git a/clang/test/SemaCXX/attr-availability.cpp 
b/clang/test/SemaCXX/attr-availability.cpp
index 8964bdbd34d44..cfb2fda3e1c75 100644
--- a/clang/test/SemaCXX/attr-availability.cpp
+++ b/clang/test/SemaCXX/attr-availability.cpp
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -std=c++11 -fsyntax-only 
-verify %s
+// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -std=c++23 -fsyntax-only 
-verify %s
 
 __attribute__((availability(macos, introduced = 10.0))) int init10();
 __attribute__((availability(macos, introduced = 11.0))) int init11(); // 
expected-note 2 {{'init11' has been marked as being introduced in macOS 11.0}}
@@ -19,3 +20,12 @@ struct S : B0, B1 {
   {}
   int i0, i1;
 };
+
+#if __cplusplus >= 202302L
+void ifConsteval() {
+  if (__builtin_available(macos 10.12, *))
+    ;
+  if consteval {
+  }
+}
+#endif

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to