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 <mboe...@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>( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits