[clang] [FlowSensitive] ignore co_await / co_yield for PropagateResultObject (PR #182624)
Florian Mayer via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 24 09:36:21 PST 2026
https://github.com/fmayer updated https://github.com/llvm/llvm-project/pull/182624
>From b5fa04bf21ae7d1c7e7be8c5053c1f86aab8d3f1 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Feb 2026 15:44:56 -0800
Subject: [PATCH 1/6] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
=?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.7
---
clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index c5b1ed8cfabdc..4bb3ea714039d 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -419,7 +419,10 @@ class ResultObjectVisitor : public AnalysisASTVisitor {
// We treat `BuiltinBitCastExpr` as an "original initializer" too as
// it may not even be casting from a record type -- and even if it is,
// the two objects are in general of unrelated type.
- isa<BuiltinBitCastExpr>(E)) {
+ isa<BuiltinBitCastExpr>(E) ||
+ // TODO: consider properly progating the Loc into the await_resume()
+ // of the result of the getOperand().
+ isa<CoawaitExpr>(E)) {
return;
}
if (auto *Op = dyn_cast<BinaryOperator>(E);
>From c5a118bbf666be41182a2adb015e3715280b7c92 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Feb 2026 17:23:31 -0800
Subject: [PATCH 2/6] typo
Created using spr 1.3.7
---
clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index 4bb3ea714039d..7c24d1448ab9d 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -420,7 +420,7 @@ class ResultObjectVisitor : public AnalysisASTVisitor {
// it may not even be casting from a record type -- and even if it is,
// the two objects are in general of unrelated type.
isa<BuiltinBitCastExpr>(E) ||
- // TODO: consider properly progating the Loc into the await_resume()
+ // TODO: consider properly propagating the Loc into the await_resume()
// of the result of the getOperand().
isa<CoawaitExpr>(E)) {
return;
>From 69d87d3ccaec20faa1f8fdcbc36f42ac5ac053e0 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Feb 2026 17:28:34 -0800
Subject: [PATCH 3/6] cmt
Created using spr 1.3.7
---
clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index 7c24d1448ab9d..743d04eff415a 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -420,8 +420,8 @@ class ResultObjectVisitor : public AnalysisASTVisitor {
// it may not even be casting from a record type -- and even if it is,
// the two objects are in general of unrelated type.
isa<BuiltinBitCastExpr>(E) ||
- // TODO: consider properly propagating the Loc into the await_resume()
- // of the result of the getOperand().
+ // The result object of co_await is <op>.await_resume(), but there is
+ // no expression for that to propagate to.
isa<CoawaitExpr>(E)) {
return;
}
>From a7cbf17fa8c60f9c4e74c43b361aa61cbac94725 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Feb 2026 17:32:32 -0800
Subject: [PATCH 4/6] coyield
Created using spr 1.3.7
---
clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index 743d04eff415a..20241f975132c 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -422,7 +422,9 @@ class ResultObjectVisitor : public AnalysisASTVisitor {
isa<BuiltinBitCastExpr>(E) ||
// The result object of co_await is <op>.await_resume(), but there is
// no expression for that to propagate to.
- isa<CoawaitExpr>(E)) {
+ isa<CoawaitExpr>(E) ||
+ // co_yield is equivalent to `co_await promise.yield_value(expr)`
+ isa<CoyieldExpr>(E)) {
return;
}
if (auto *Op = dyn_cast<BinaryOperator>(E);
>From d30de66d49c7bb21fe3ac8fb1bf56de427e4b3d0 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Feb 2026 17:40:40 -0800
Subject: [PATCH 5/6] also co_yield
Created using spr 1.3.7
---
clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index 20241f975132c..f664366b7f25f 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -420,11 +420,11 @@ class ResultObjectVisitor : public AnalysisASTVisitor {
// it may not even be casting from a record type -- and even if it is,
// the two objects are in general of unrelated type.
isa<BuiltinBitCastExpr>(E) ||
+ // This covers both co_await and co_yield.
// The result object of co_await is <op>.await_resume(), but there is
- // no expression for that to propagate to.
- isa<CoawaitExpr>(E) ||
- // co_yield is equivalent to `co_await promise.yield_value(expr)`
- isa<CoyieldExpr>(E)) {
+ // no expression for that to prpagate to.
+ // co_yield is equivalent to `co_await promise.yield_value(expr)`.
+ isa<CoroutineSuspendExpr>(E)) {
return;
}
if (auto *Op = dyn_cast<BinaryOperator>(E);
>From 9c13a38a9516a6e5abdc2ef6fc3b5015a60bc92e Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Tue, 24 Feb 2026 09:36:01 -0800
Subject: [PATCH 6/6] typo
Created using spr 1.3.7
---
clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index f664366b7f25f..bc13ee398fcad 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -422,7 +422,7 @@ class ResultObjectVisitor : public AnalysisASTVisitor {
isa<BuiltinBitCastExpr>(E) ||
// This covers both co_await and co_yield.
// The result object of co_await is <op>.await_resume(), but there is
- // no expression for that to prpagate to.
+ // no expression for that to propagate to.
// co_yield is equivalent to `co_await promise.yield_value(expr)`.
isa<CoroutineSuspendExpr>(E)) {
return;
More information about the cfe-commits
mailing list