[clang] 5c52676 - [Clang][C] Fix init statement nullptr dereference in condition of while statement (#219056)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 27 04:59:09 PDT 2026
Author: Tadeusz
Date: 2026-08-27T14:59:04+03:00
New Revision: 5c52676a51a88b3621a74651435f5650679b344c
URL: https://github.com/llvm/llvm-project/commit/5c52676a51a88b3621a74651435f5650679b344c
DIFF: https://github.com/llvm/llvm-project/commit/5c52676a51a88b3621a74651435f5650679b344c.diff
LOG: [Clang][C] Fix init statement nullptr dereference in condition of while statement (#219056)
In conditions with an empty init statement with attributes such as
'([[]];)', the InitStmt pointer argument in the ParseCondition method
will be dereferenced. However, InitStmt is set to nullptr when parsing a
'while' statement condition, causing a crash.
This change fixes the issue by added a check that InitStmt is not
nullptr before entering the associated logic, which is consistent with
how other parts of this function handle a nullptr InitStmt. This makes
sense because a nullptr InitStmt is associated with conditions that
cannot have an init statement (the only case being 'while') and this
block operates exclusively on init statements.
Fix #218879
Added:
Modified:
clang/lib/Parse/ParseExprCXX.cpp
clang/test/Parser/c2x-attributes.c
Removed:
################################################################################
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp
index f9a0dcc7d53af..4564e4dc364f0 100644
--- a/clang/lib/Parse/ParseExprCXX.cpp
+++ b/clang/lib/Parse/ParseExprCXX.cpp
@@ -1936,7 +1936,7 @@ Sema::ConditionResult Parser::ParseCondition(StmtResult *InitStmt,
// Handle '(; expr)', '([[...]]; expr)' and '(__attribute__((...)); expr)'
// when GNU-style attributes are finalized.
- if (Tok.is(tok::semi)) {
+ if (InitStmt && Tok.is(tok::semi)) {
StmtResult Null = Actions.ActOnNullStmt(ConsumeToken());
if (ParsedAttrs) {
WarnOnInit();
diff --git a/clang/test/Parser/c2x-attributes.c b/clang/test/Parser/c2x-attributes.c
index b291cb75818c0..5ecb2ec0dab74 100644
--- a/clang/test/Parser/c2x-attributes.c
+++ b/clang/test/Parser/c2x-attributes.c
@@ -120,6 +120,12 @@ void f11(void) {
[[]] for (;;);
[[]] while (1);
+
+ while ([[]];) {} // expected-error {{an attribute list cannot appear here}} \
+ // expected-error {{expected expression}}
+ while (;[[]];;) {} // expected-error {{expected expression}} \
+ // expected-error {{expected expression}}
+
[[]] do [[]] { } while(1);
[[]] (void)1;
More information about the cfe-commits
mailing list