[clang] [clang][dataflow] Avoid putting an assertion in an `LLVM_DEBUG` block. (PR #67313)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 25 04:17:45 PDT 2023
https://github.com/martinboehme created https://github.com/llvm/llvm-project/pull/67313
`LLVM_DEBUG` blocks are only run if the `-debug` command line flag is passed.
We don't do this in any of our CI builds, so the assertion has limited value and
it's likely it will start failing over time.
>From 88189183e3562ddc48239d213efffec791b413a2 Mon Sep 17 00:00:00 2001
From: Martin Braenne <mboehme at google.com>
Date: Mon, 25 Sep 2023 11:16:54 +0000
Subject: [PATCH] [clang][dataflow] Avoid putting an assertion in an
`LLVM_DEBUG` block.
`LLVM_DEBUG` blocks are only run if the `-debug` command line flag is passed.
We don't do this in any of our CI builds, so the assertion has limited value and
it's likely it will start failing over time.
---
clang/lib/Analysis/FlowSensitive/Transfer.cpp | 28 +++++++++++--------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/clang/lib/Analysis/FlowSensitive/Transfer.cpp b/clang/lib/Analysis/FlowSensitive/Transfer.cpp
index 2414a1cc026af5f..2ad3f9d7c94a80c 100644
--- a/clang/lib/Analysis/FlowSensitive/Transfer.cpp
+++ b/clang/lib/Analysis/FlowSensitive/Transfer.cpp
@@ -696,19 +696,23 @@ class TransferVisitor : public ConstStmtVisitor<TransferVisitor> {
FieldLocs.insert({Field, &Loc});
}
- LLVM_DEBUG({
- // Check that we satisfy the invariant that a `RecordStorageLoation`
- // contains exactly the set of modeled fields for that type.
- // `ModeledFields` includes fields from all the bases, but only the
- // modeled ones. However, if a class type is initialized with an
- // `InitListExpr`, all fields in the class, including those from base
- // classes, are included in the set of modeled fields. The code above
- // should therefore populate exactly the modeled fields.
- auto ModeledFields = Env.getDataflowAnalysisContext().getModeledFields(Type);
- assert(ModeledFields.size() == FieldLocs.size());
+ // Check that we satisfy the invariant that a `RecordStorageLoation`
+ // contains exactly the set of modeled fields for that type.
+ // `ModeledFields` includes fields from all the bases, but only the
+ // modeled ones. However, if a class type is initialized with an
+ // `InitListExpr`, all fields in the class, including those from base
+ // classes, are included in the set of modeled fields. The code above
+ // should therefore populate exactly the modeled fields.
+ assert([&]() {
+ auto ModeledFields =
+ Env.getDataflowAnalysisContext().getModeledFields(Type);
+ if (ModeledFields.size() != FieldLocs.size())
+ return false;
for ([[maybe_unused]] auto [Field, Loc] : FieldLocs)
- assert(ModeledFields.contains(cast_or_null<FieldDecl>(Field)));
- });
+ if (!ModeledFields.contains(cast_or_null<FieldDecl>(Field)))
+ return false;
+ return true;
+ }());
auto &Loc =
Env.getDataflowAnalysisContext().arena().create<RecordStorageLocation>(
More information about the cfe-commits
mailing list