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
