diff --git a/src/Attr.cc b/src/Attr.cc index ff3b5e8b3f..c8633858bf 100644 --- a/src/Attr.cc +++ b/src/Attr.cc @@ -201,6 +201,12 @@ void Attributes::AddAttr(IntrusivePtr attr) attrs.emplace_back(make_intrusive(ATTR_OPTIONAL)); } +void Attributes::AddAttrs(const IntrusivePtr& a) + { + for ( const auto& attr : a->Attrs() ) + AddAttr(attr); + } + void Attributes::AddAttrs(Attributes* a) { for ( const auto& attr : a->Attrs() ) diff --git a/src/Attr.h b/src/Attr.h index 3e90b52033..44d28f9d97 100644 --- a/src/Attr.h +++ b/src/Attr.h @@ -87,6 +87,10 @@ public: Attributes(IntrusivePtr t, bool in_record, bool is_global); void AddAttr(IntrusivePtr a); + + void AddAttrs(const IntrusivePtr& a); + + [[deprecated("Remove in v4.1. Pass IntrusivePtr instead.")]] void AddAttrs(Attributes* a); // Unref's 'a' when done Attr* FindAttr(attr_tag t) const; diff --git a/src/ID.cc b/src/ID.cc index a4a0b6f119..3cb2753ebe 100644 --- a/src/ID.cc +++ b/src/ID.cc @@ -308,7 +308,7 @@ std::string ID::GetDeprecationWarning() const void ID::AddAttrs(IntrusivePtr a) { if ( attrs ) - attrs->AddAttrs(a.release()); + attrs->AddAttrs(a); else attrs = std::move(a);