It will be hard to guarantee that a pointer is never found anywhere on the stack. That's why we generally only tests that objects are retained with stack scanning, not that they are reclaimed. I would recommend dropping the test rather than trying to fix it.
On Thursday, August 8, 2024 at 2:59:11 PM UTC+2 zcb...@gmail.com wrote: > Thanks for the explanation! > > I was actually quite confused why pointer in vector was also retained, > I'll fix my tests. > > On Thursday, August 8, 2024 at 8:00:44 PM UTC+9 omer...@chromium.org > wrote: > >> For some reasons my previous replies didn't get to the mailing list. >> >> The question is whether the pointer itself is on the stack or not. >> IIRC std::variant uses inline storage to store values, so a pointer that >> you keep in a std::variant would be on stack and would be found by stack >> scanning. >> std::vector, on the other hand, allocates an off-stack backing store that >> it allocates (and reallocates as the vector grows), so pointers kept in a >> std::vector would not be found by stack scanning. >> >> If your tests pass, it's because the GC is finding your pointer somewhere >> else on the stack (e.g. left over from calling set_needle), but not in the >> vector. >> On Thursday, August 8, 2024 at 10:43:43 AM UTC+2 zcb...@gmail.com wrote: >> >>> To answer my own question, I wrote some tests: >>> >>> https://github.com/compilets/compilets/commit/d69722fb36260caa278843311cb043f5fe8a90d7 >>> >>> It seems that pointers stored in containers can be retained. >>> (It would be great if someone can verify this though.) >>> >>> On Thursday, August 8, 2024 at 9:11:33 AM UTC+9 Cheng wrote: >>> >>>> Cppgc does stack scanning so objects pointed by raw pointers on stack >>>> are not garbage collected: >>>> >>>> Object* ptr = MakeGarbageCollected<Object>(); // retained. >>>> >>>> But what if I put the pointer in a variant? >>>> >>>> std::variant<Object*, std::monostate> ptr = >>>> MakeGarbageCollected<Object>(); // retain? >>>> >>>> Or even in a vector? >>>> >>>> std::vector<Object*> ptrs = { MakeGarbageCollected<Object>() }; // >>>> retain? >>>> >>>> Will the object still be retained by the container of pointer on stack? >>>> >>> -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/b62bce88-76f8-4bf2-9a51-efe1fd6587d2n%40googlegroups.com.