@@ -62,7 +62,7 @@ class Block final {
6262
6363 Block (unsigned EvalID, const Descriptor *Desc, bool IsStatic = false ,
6464 bool IsExtern = false , bool IsWeak = false , bool IsDummy = false )
65- : Desc(Desc), EvalID(EvalID), IsStatic(IsStatic), IsDynamic( false ) {
65+ : Desc(Desc), EvalID(EvalID), IsStatic(IsStatic) {
6666 assert (Desc);
6767 AccessFlags |= (ExternFlag * IsExtern);
6868 AccessFlags |= (WeakFlag * IsWeak);
@@ -80,7 +80,7 @@ class Block final {
8080 // / Checks if the block is temporary.
8181 bool isTemporary () const { return Desc->IsTemporary ; }
8282 bool isWeak () const { return AccessFlags & WeakFlag; }
83- bool isDynamic () const { return IsDynamic ; }
83+ bool isDynamic () const { return (DynAllocId != std:: nullopt ) ; }
8484 bool isDummy () const { return AccessFlags & DummyFlag; }
8585 bool isDead () const { return AccessFlags & DeadFlag; }
8686 // / Returns the size of the block.
@@ -160,6 +160,9 @@ class Block final {
160160 AccessFlags |= (DummyFlag * IsDummy);
161161 }
162162
163+ // / To be called by DynamicAllocator.
164+ void setDynAllocId (unsigned ID) { DynAllocId = ID; }
165+
163166 // / Deletes a dead block at the end of its lifetime.
164167 void cleanup ();
165168
@@ -183,9 +186,8 @@ class Block final {
183186 // / Flag indicating if the block contents have been initialized
184187 // / via invokeCtor.
185188 bool IsInitialized = false ;
186- // / Flag indicating if this block has been allocated via dynamic
187- // / memory allocation (e.g. malloc).
188- bool IsDynamic = false ;
189+ // / Allocation ID for this dynamic allocation, if it is one.
190+ UnsignedOrNone DynAllocId = std::nullopt ;
189191 // / AccessFlags containing IsExtern, IsDead, IsWeak, and IsDummy bits.
190192 uint8_t AccessFlags = 0 ;
191193};
0 commit comments