[PATCH] D126405: [clang][dataflow] Relax assert on existence of `this` pointee storage
Eric Li via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 25 13:58:54 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG33b598a808b9: [clang][dataflow] Relax assert on existence of `this` pointee storage (authored by li.zhe.hua).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126405/new/
https://reviews.llvm.org/D126405
Files:
clang/lib/Analysis/FlowSensitive/Transfer.cpp
clang/unittests/Analysis/FlowSensitive/TransferTest.cpp
Index: clang/unittests/Analysis/FlowSensitive/TransferTest.cpp
===================================================================
--- clang/unittests/Analysis/FlowSensitive/TransferTest.cpp
+++ clang/unittests/Analysis/FlowSensitive/TransferTest.cpp
@@ -42,10 +42,11 @@
template <typename Matcher>
void runDataflow(llvm::StringRef Code, Matcher Match,
LangStandard::Kind Std = LangStandard::lang_cxx17,
- bool ApplyBuiltinTransfer = true) {
+ bool ApplyBuiltinTransfer = true,
+ llvm::StringRef TargetFun = "target") {
ASSERT_THAT_ERROR(
test::checkDataflow<NoopAnalysis>(
- Code, "target",
+ Code, TargetFun,
[ApplyBuiltinTransfer](ASTContext &C, Environment &) {
return NoopAnalysis(C, ApplyBuiltinTransfer);
},
@@ -3175,4 +3176,27 @@
});
}
+TEST_F(TransferTest, DoesNotCrashOnUnionThisExpr) {
+ std::string Code = R"(
+ union Union {
+ int A;
+ float B;
+ };
+
+ void foo() {
+ Union A;
+ Union B;
+ A = B;
+ }
+ )";
+ // This is a crash regression test when calling the transfer function on a
+ // `CXXThisExpr` that refers to a union.
+ runDataflow(
+ Code,
+ [](llvm::ArrayRef<
+ std::pair<std::string, DataflowAnalysisState<NoopLattice>>>,
+ ASTContext &) {},
+ LangStandard::lang_cxx17, /*ApplyBuiltinTransfer=*/true, "operator=");
+}
+
} // namespace
Index: clang/lib/Analysis/FlowSensitive/Transfer.cpp
===================================================================
--- clang/lib/Analysis/FlowSensitive/Transfer.cpp
+++ clang/lib/Analysis/FlowSensitive/Transfer.cpp
@@ -279,7 +279,10 @@
void VisitCXXThisExpr(const CXXThisExpr *S) {
auto *ThisPointeeLoc = Env.getThisPointeeStorageLocation();
- assert(ThisPointeeLoc != nullptr);
+ if (ThisPointeeLoc == nullptr)
+ // Unions are not supported yet, and will not have a location for the
+ // `this` expression's pointee.
+ return;
auto &Loc = Env.createStorageLocation(*S);
Env.setStorageLocation(*S, Loc);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126405.432125.patch
Type: text/x-patch
Size: 2153 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220525/56278a89/attachment.bin>
More information about the cfe-commits
mailing list