diff --git a/CHANGES b/CHANGES index c2e1ddfd8e..3e36bbdf99 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +8.1.0-dev.542 | 2025-09-16 10:53:04 -0700 + + * fix for tracking identifiers and aggregates when compiling to standalone-C++ (Vern Paxson, Corelight) + 8.1.0-dev.540 | 2025-09-16 10:52:44 -0700 * fix for '?' operator precedence when compiling scripts to C++ (Vern Paxson, Corelight) diff --git a/VERSION b/VERSION index 6cb17b4f06..a658c02256 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.1.0-dev.540 +8.1.0-dev.542 diff --git a/src/script_opt/CPP/Consts.cc b/src/script_opt/CPP/Consts.cc index 919533edd0..0b6257246e 100644 --- a/src/script_opt/CPP/Consts.cc +++ b/src/script_opt/CPP/Consts.cc @@ -43,16 +43,11 @@ shared_ptr CPPCompile::RegisterConstant(const ValPtr& vp, int& con // render the same. t->Describe(&d); - // Likewise, tables that have attributes. - if ( t->Tag() == TYPE_TABLE ) { - const auto& attrs = v->AsTableVal()->GetAttrs(); - if ( attrs ) - attrs->Describe(&d); - else - d.Add(""); - } - c_desc = d.Description(); + + // Aggregates need to be pointer-unique. + if ( IsAggr(t) ) + c_desc += util::fmt("pointer %p", static_cast(v)); } auto c = constants.find(c_desc); diff --git a/src/script_opt/ProfileFunc.cc b/src/script_opt/ProfileFunc.cc index 6c4660a4e9..95bcd405e6 100644 --- a/src/script_opt/ProfileFunc.cc +++ b/src/script_opt/ProfileFunc.cc @@ -196,6 +196,8 @@ TraversalCode ProfileFunc::PreExpr(const Expr* e) { auto n = e->AsNameExpr(); auto id = n->IdPtr(); + TrackID(id); + // Turns out that NameExpr's can be constructed using a // different Type* than that of the identifier itself, // so be sure we track the latter too. diff --git a/src/script_opt/ProfileFunc.h b/src/script_opt/ProfileFunc.h index 7942d72b8e..d4ad16300e 100644 --- a/src/script_opt/ProfileFunc.h +++ b/src/script_opt/ProfileFunc.h @@ -107,7 +107,6 @@ public: const std::vector& Exprs() const { return exprs; } const std::vector& Lambdas() const { return lambdas; } const std::vector& Constants() const { return constants; } - const IDSet& UnorderedIdentifiers() const { return ids; } const std::vector& OrderedIdentifiers() const { return ordered_ids; } const TypeSet& UnorderedTypes() const { return types; } const std::vector& OrderedTypes() const { return ordered_types; }