[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#19415: Compiler shares storage for assoc-lists even if some of them
From: |
Mark H Weaver |
Subject: |
bug#19415: Compiler shares storage for assoc-lists even if some of them are mutated |
Date: |
Mon, 22 Dec 2014 02:08:31 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
tags 19415 + notabug
close 19415
merge 19415 19417
thanks
Panicz Maciej Godek <address@hidden> writes:
> This bug was traced by Matt Wette and described here:
>
> http://lists.gnu.org/archive/html/guile-user/2014-12/msg00023.html
>
> In short, the bug manifests itself when at least two consecutive let
> forms are used with an assoc list argument which starts with identical
> elements, and the first appearance gets mutated before the second:
>
> (begin
> (let ((l '((a . X)(b . Y)(c . 7))))
> (assoc-set! l 'b 'Z))
> (let ((l '((a . X)(b . Y))))
> l))
> ===> ((a . X) (b . Z))
>
> The issue is known to appear in guile 2.0.11 and 2.0.5
As later explained on guile-user, mutating literal data is not permitted
in scheme and leads to unspecified behavior. Our compiler aggressively
shares data between literals in the same compilation unit.
See <http://bugs.gnu.org/16060> for a related wishlist item.
Thanks,
Mark