diff --git a/CHANGES b/CHANGES index 40757a9a44..2b37037a91 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,9 @@ +8.0.0-dev.817 | 2025-07-31 10:34:43 -0700 + + * Fix use-after-move reported by clang-tidy (Tim Wojtulewicz, Corelight) + + This was introduced by 9eb94ee151ec437fd076ef16d016af372391af65. + 8.0.0-dev.815 | 2025-07-31 16:10:33 +0100 * Add tests for the deprecated-dpd-log.zeek policy script (Johanna Amann, Corelight) diff --git a/VERSION b/VERSION index 70aa2254dd..8646037f5c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.0.0-dev.815 +8.0.0-dev.817 diff --git a/src/Type.cc b/src/Type.cc index 68ff2d9de9..e900d8165a 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -1022,8 +1022,6 @@ private: int i = 0; for ( auto& ci : rt->creation_inits ) { if ( ! ci.second->IsDeferrable() ) { - rt->creation_inits[i++] = std::move(ci); - // A non-deferrable field with a &default attribute is expected to also exist in deferred_inits // such that re-initialization after deletion of the field works. if ( rt->FieldDecl(ci.first)->GetAttr(detail::ATTR_DEFAULT) != detail::Attr::nil ) { @@ -1031,10 +1029,12 @@ private: zeek::reporter->InternalError("non-deferrable field %s$%s with &default not in deferred_inits", rt->GetName().c_str(), rt->FieldName(i)); - if ( rt->deferred_inits[ci.first] != rt->creation_inits[i - 1].second ) + else if ( rt->deferred_inits[ci.first] != ci.second ) zeek::reporter->InternalError("non-deferrable field %s$%s with &default has inconsistent inits", rt->GetName().c_str(), rt->FieldName(i)); } + + rt->creation_inits[i++] = std::move(ci); } else { // If deferred_inits already has a value, it should be the same as the one