GNU bug report logs -
#29799
24.5; cl-loop guard clause missing
Previous Next
Reported by: Tino Calancha <tino.calancha <at> gmail.com>
Date: Thu, 21 Dec 2017 09:39:02 UTC
Severity: normal
Tags: fixed
Found in version 24.5
Fixed in version 28.1
Done: Noam Postavsky <npostavs <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
X-Debbugs-CC: monnier <at> iro.umontreal.ca,npostavs <at> gmail.com
Consider the following snippet code:
--8<-----------------------------cut here---------------start------------->8---
(require 'cl-lib)
(let* ((size 7)
(arr (make-vector size 0)))
(cl-loop for k below size
for x = (* 2 k) and y = (1+ (elt arr k))
collect (list k x y)))
--8<-----------------------------cut here---------------end--------------->8---
When you execute the form above it fails because
the loop overrun `arr'.
The equivalent code in CL works:
--8<-----------------------------cut here---------------start------------->8---
(let* ((size 7)
(arr (make-array size :initial-element 0)))
(loop :for k :below size
:for x = (* 2 k) :and y = (1+ (elt arr k))
:collect (list k x y)))
--8<-----------------------------cut here---------------end--------------->8---
* The expansion of `loop' in CL checks the condition
(>= k 7)
right before update the internal variables (`x' and `y').
* The expansion of `cl-loop' instead, doesn't check the condition
before update the vars => in the code above we overrun `arr'.
In GNU Emacs 24.5.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.11)
of 2017-09-12 on hullmann, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.11902000
System Description: Debian GNU/Linux 9.3 (stretch)
This bug report was last modified 5 years and 77 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.