fix(3p/nix/expr): use traceable_allocator for btree_map

The prior use of gc_allocator meant that the btree nodes themselves were being collected. Additionally, have Attr (contains a Value) and Bindings explicitly inherit from gc, even though Bindings is always allocated under `new (GC)`.

Detected by running under GC_ENABLE_INCREMENTAL=1.

Change-Id: Iacf13b34b5aa12e417ea87c9b46e2bf9199fdb26
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1544
Reviewed-by: glittershark <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Kane York 2020-08-01 14:11:53 -07:00 committed by kanepyork
parent 3fdce7c6be
commit f7a85c5060

View file

@ -14,7 +14,7 @@ class EvalState;
struct Value;
/* Map one attribute name to its value. */
struct Attr {
struct Attr : public gc {
Symbol name;
Value* value; // TODO(tazjin): Who owns this?
Pos* pos; // TODO(tazjin): Who owns this?
@ -26,9 +26,9 @@ struct Attr {
// allocator explicitly specified.
using AttributeMap =
absl::btree_map<Symbol, Attr, std::less<Symbol>,
gc_allocator<std::pair<const Symbol, Attr>>>;
traceable_allocator<std::pair<const Symbol, Attr>>>;
class Bindings {
class Bindings : public gc {
public:
typedef AttributeMap::iterator iterator;