The only difference in behavior is that this removes the attribute
when the pool becomes empty.
                        attrval += "|";
                attrval += s;
        }
-       attributes[id] = RTLIL::Const(attrval);
+       set_string_attribute(id, attrval);
 }
 
 void RTLIL::AttrObject::add_strpool_attribute(RTLIL::IdString id, const pool<string> &data)
 {
        pool<string> data;
        if (attributes.count(id) != 0)
-               for (auto s : split_tokens(attributes.at(id).decode_string(), "|"))
+               for (auto s : split_tokens(get_string_attribute(id), "|"))
                        data.insert(s);
        return data;
 }