@@ -73,6 +73,9 @@ Literal::Literal(Type type) : type(type) {
7373
7474 if (type.isRef () && type.getHeapType ().isMaybeShared (HeapType::waitqueue)) {
7575 assert (type.isNonNullable ());
76+ // See ~Literal and isData(). isData() is true for waitqueues so we expect
77+ // gcData to be present even if null.
78+ new (&gcData) std::shared_ptr<GCData>();
7679 return ;
7780 }
7881
@@ -113,7 +116,6 @@ Literal::Literal(std::shared_ptr<GCData> gcData, HeapType type)
113116 assert ((isData () && gcData) ||
114117 (type.isMaybeShared (HeapType::ext) && gcData) ||
115118 (type.isMaybeShared (HeapType::string) && gcData) ||
116- (type.isMaybeShared (HeapType::waitqueue) && gcData) ||
117119 (type.isMaybeShared (HeapType::any) && gcData) ||
118120 (type.isBottom () && !gcData));
119121}
@@ -189,7 +191,6 @@ Literal::Literal(const Literal& other) : type(other.type) {
189191 return ;
190192 case HeapType::ext:
191193 case HeapType::any:
192- case HeapType::waitqueue:
193194 // Externalized or internalized reference/payload.
194195 new (&gcData) std::shared_ptr<GCData>(other.gcData );
195196 return ;
@@ -371,10 +372,8 @@ std::shared_ptr<FuncData> Literal::getFuncData() const {
371372}
372373
373374std::shared_ptr<GCData> Literal::getGCData () const {
374- assert (
375- isNull () || isData () ||
376- (type.isRef () && (type.getHeapType ().isMaybeShared (HeapType::ext) ||
377- type.getHeapType ().isMaybeShared (HeapType::waitqueue))));
375+ assert (isNull () || isData () ||
376+ (type.isRef () && (type.getHeapType ().isMaybeShared (HeapType::ext))));
378377 return gcData;
379378}
380379
0 commit comments