On Thu, Oct 9, 2025 at 11:24 AM Nikolaos Chatzikonstantinou
<[email protected]> wrote:
>
> On Thu, Oct 9, 2025 at 7:26 AM Nikolaos Chatzikonstantinou
> <[email protected]> wrote:
> >
> > On Sun, Sep 21, 2025 at 12:47 AM Nikolaos Chatzikonstantinou
> > <[email protected]> wrote:
> > >
> > > Hello bug-guile,
> > >
> > > I have a structure (srfi srfi-9 gnu) that keeps parts of strings in a
> > > binary tree (it's a rope). The intention was to have it immutable, so
> > > I used substring/shared. I kept getting errors on my unit tests when I
> > > referenced individual characters; I could not replicate these errors
> > > on the REPL. Eventually I realized that substring/shared caused them.
> >
> > I want to offer a small (<100 LoC) reproducible example now. I'm using
> > 3.0.10. Try to run the test suite with autocompilation disabled
> > (--no-auto-compile), and you should get failure (if success, try
> > running again, rarely it succeeds.) If you compile the test.scm file,
> > then it should work fine.
> >
> > I am not sure that I can figure this one out myself further, but
> > somehow it is related to my projects tests being left uncompiled. Does
> > anyone have an insight to the problem here?
>
> Here is an even smaller reproducible example [..]

I rounded it down to a one-liner:

---------------------test.scm---------------------
(use-modules (ice-9 local-eval))
(let ((proc (local-compile '(lambda (s) (string-ref s 0))
                           (the-environment)))
      (s (local-compile '(substring/shared "hello" 0 2)
                        (the-environment))))
  (format #t "This should print #\\h but instead it prints: ~S~%"
          (proc s)))
------------------end of test.scm-----------------

If you then do `guile --no-auto-compile test.scm` you will see that
#\nul is printed instead of #\h.

Note that moving `substring/shared` into another local-compile will
make the above work as expected instead.

Regards,
Nikolaos Chatzikonstantinou



Reply via email to