Jean Abou Samra <j...@abou-samra.fr> writes: > To check that, I applied > > diff --git a/lily/duration-scheme.cc b/lily/duration-scheme.cc > index 5d9b4447f1..6a09253adf 100644 > --- a/lily/duration-scheme.cc > +++ b/lily/duration-scheme.cc > @@ -45,6 +45,8 @@ Is @var{p1} shorter than @var{p2}? > auto *const a = LY_ASSERT_SMOB (Duration, p1, 1); > auto *const b = LY_ASSERT_SMOB (Duration, p2, 2); > > + scm_gc (); > + > if (Duration::compare (*a, *b) < 0) > return SCM_BOOL_T; > else > > and compiled > > #(do ((i 0 (1+ i))) > ((= i 100)) > (ly:duration<? #{ 4 #} #{ 8 #})) > > > No crashes observed.
That tells you nothing at all unless you verify that the generated code writes over p1 and p2 before scm_gc is called. This is possible due to optimisation but unlikely. > If I am understanding this correctly, a source of possible GC > crashes went away in the Guile 2 transition. Or am I missing > something? The Guile API does not give any guarantees as far as I can see, but I would not rule out that the current implementation dereferences SCM pointers as pointers. I have no idea about the internal representation of SCM types at the moment, nor whether there may be different ones depending on platforms and/or options. -- David Kastrup