unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#62053: Guile compiler is unable to compile tiny program
@ 2023-03-08 11:07 var-vniiaes--- via Bug reports for GUILE, GNU's Ubiquitous Extension Language
  2023-03-08 16:41 ` tomas
  0 siblings, 1 reply; 3+ messages in thread
From: var-vniiaes--- via Bug reports for GUILE, GNU's Ubiquitous Extension Language @ 2023-03-08 11:07 UTC (permalink / raw)
  To: 62053

[-- Attachment #1: Type: text/plain, Size: 642 bytes --]


Guile compiler is unable to compile tiny program:
 
(define (fn l)
    (define (ok l)
       (or (and (pair? l) l)
           (error "list is empty")))
    (cons (reverse (car l)) (ok l)))
 
amaya@picasso:~/tmp/guile-3.0.9
$ ../prefix/bin/guile ~/tmp/guile-compiler-bug.scm
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /home/amaya/tmp/guile-compiler-bug.scm
;;; WARNING: compilation of /home/amaya/tmp/guile-compiler-bug.scm failed:
;;; not found 22
 
Compiler reports confusing message here: `not found 22’.   

[-- Attachment #2: Type: text/html, Size: 1031 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#62053: Guile compiler is unable to compile tiny program
  2023-03-08 11:07 bug#62053: Guile compiler is unable to compile tiny program var-vniiaes--- via Bug reports for GUILE, GNU's Ubiquitous Extension Language
@ 2023-03-08 16:41 ` tomas
  2023-03-08 17:38   ` Dr. Arne Babenhauserheide
  0 siblings, 1 reply; 3+ messages in thread
From: tomas @ 2023-03-08 16:41 UTC (permalink / raw)
  To: 62053

[-- Attachment #1: Type: text/plain, Size: 2176 bytes --]

On Wed, Mar 08, 2023 at 02:07:56PM +0300, var-vniiaes--- via Bug reports for GUILE, GNU's Ubiquitous Extension Language wrote:
> 
> Guile compiler is unable to compile tiny program:
>  
> (define (fn l)
>     (define (ok l)
>        (or (and (pair? l) l)
>            (error "list is empty")))
>     (cons (reverse (car l)) (ok l)))
>  
> amaya@picasso:~/tmp/guile-3.0.9
> $ ../prefix/bin/guile ~/tmp/guile-compiler-bug.scm
> ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
> ;;;       or pass the --no-auto-compile argument to disable.
> ;;; compiling /home/amaya/tmp/guile-compiler-bug.scm
> ;;; WARNING: compilation of /home/amaya/tmp/guile-compiler-bug.scm failed:
> ;;; not found 22
>  
> Compiler reports confusing message here: `not found 22’.   

Bizarre. Can confirm 

tomas@trotzki:~/foo$ vim buggy.scm
  tomas@trotzki:~/foo$ guile buggy.scm 
  ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
  ;;;       or pass the --no-auto-compile argument to disable.
  ;;; compiling /home/tomas/foo/buggy.scm
  ;;; /home/tomas/foo/buggy.scm:2:0: warning: possibly unbound variable `#{   }#'
  ;;; /home/tomas/foo/buggy.scm:3:0: warning: possibly unbound variable `#{      }#'
  ;;; /home/tomas/foo/buggy.scm:4:0: warning: possibly unbound variable `#{          }#'
  ;;; WARNING: compilation of /home/tomas/foo/buggy.scm failed:
  ;;; not found 25

  tomas@trotzki:~/foo$ guile --version
  guile (GNU Guile) 3.0.8.57-bc3b1
  Copyright (C) 2022 Free Software Foundation, Inc.

  License LGPLv3+: GNU LGPL 3 or later <http://gnu.org/licenses/lgpl.html>.
  This is free software: you are free to change and redistribute it.
  There is NO WARRANTY, to the extent permitted by law.

(so in my case it's 25 instead of 22). Interestingly, my version also
produces warnings about possibly unbound variables). If I enter the
code line by line into a repl, I also get a "not found 22".

Interestingly, if I add a call to fn to the end of that snippet
(e.g. (fn '(a b))), the "not found" disappears. The unbound var
warnings stay.

Cheers
-- 
t



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#62053: Guile compiler is unable to compile tiny program
  2023-03-08 16:41 ` tomas
@ 2023-03-08 17:38   ` Dr. Arne Babenhauserheide
  0 siblings, 0 replies; 3+ messages in thread
From: Dr. Arne Babenhauserheide @ 2023-03-08 17:38 UTC (permalink / raw)
  To: tomas; +Cc: 62053

[-- Attachment #1: Type: text/plain, Size: 2437 bytes --]


<tomas@tuxteam.de> writes:

>> (define (fn l)
>>     (define (ok l)
>>        (or (and (pair? l) l)
>>            (error "list is empty")))
>>     (cons (reverse (car l)) (ok l)))
> (so in my case it's 25 instead of 22). Interestingly, my version also
> produces warnings about possibly unbound variables). If I enter the
> code line by line into a repl, I also get a "not found 22".
>
> Interestingly, if I add a call to fn to the end of that snippet
> (e.g. (fn '(a b))), the "not found" disappears. The unbound var
> warnings stay.

Also interesting: I can primitive-eval the code:
(define code '(define (fn l)
  (define (ok l)
    (or (and (pair? l) l)
      (error "list is empty")))
  (cons (reverse (car l)) (ok l))))

(primitive-eval code)

(fn '((1 2))) ;; => ((2 1) (1 2))

What might be happening here is control flow analysis discarding
impossible branches:

(car l) will throw an error when l is not a pair. Since arguments are
evaluated in order, (ok l) will always succeed. This means (ok l) can be
replaced by l.

To look into details:

(compile code) ;; => throws an error: not found 22
;; use ,bt to get:

,bt
In system/base/compile.scm:
   352:28 17 (compile _ #:from _ #:to _ #:env _ #:optimization-level _ #:warning-level _ #:opts _)
   265:44 16 (_ _ _)
   265:44 15 (_ _ _)
   261:33 14 (_ #<intmap 0-83> #<module (#{ g836}#) 7fcbf85dfbe0>)
In language/cps/optimize.scm:
   130:12 13 (_ _ _)
    102:3 12 (optimize-higher-order-cps _ _)
In language/cps/type-fold.scm:
   775:16 11 (type-fold _)
In language/cps/renumber.scm:
   170:36 10 (renumber #<intmap 0-4,6-21,52-53> _)
   166:30  9 (compute-renaming _ _)
    144:7  8 (visit-fun _ _ _)
   160:19  7 (visit-fun 12 #<transient-intmap 0-4,6-11> #<transient-intmap 0-3,5-6>)
In language/cps/utils.scm:
   245:39  6 (compute-predecessors #<intmap 0-4,6-21,52-53> _ #:labels _)
    107:3  5 (compute-function-body _ _)
   129:30  4 (visit-cont _ _)
   129:30  3 (visit-cont _ _)
    112:9  2 (visit-cont 22 _)
In language/cps/intmap.scm:
   397:51  1 (_ _)
In ice-9/boot-9.scm:
  1685:16  0 (raise-exception _ #:continuable? _)


I’ll leave further steps to folks who are more experienced with
optimize-higher-order-cps (or want to become more experienced with it).


Best wishes,
Arne
-- 
Unpolitisch sein
heißt politisch sein,
ohne es zu merken.
draketo.de

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 1125 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-03-08 17:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-08 11:07 bug#62053: Guile compiler is unable to compile tiny program var-vniiaes--- via Bug reports for GUILE, GNU's Ubiquitous Extension Language
2023-03-08 16:41 ` tomas
2023-03-08 17:38   ` Dr. Arne Babenhauserheide

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).