From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.bugs Subject: bug#46834: 28.0.50; byte-compiling the standard counter closure fails Date: Sun, 28 Feb 2021 19:57:59 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000378e7405bc6aedd5" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26669"; mail-complaints-to="usenet@ciao.gmane.io" To: 46834@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Feb 28 20:59:10 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lGSDc-0006mZ-Pu for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 28 Feb 2021 20:59:08 +0100 Original-Received: from localhost ([::1]:32948 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lGSDb-0008DT-Oe for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 28 Feb 2021 14:59:07 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lGSDW-0008DL-8x for bug-gnu-emacs@gnu.org; Sun, 28 Feb 2021 14:59:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:35778) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lGSDW-0007K6-1j for bug-gnu-emacs@gnu.org; Sun, 28 Feb 2021 14:59:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lGSDW-0006yw-0H for bug-gnu-emacs@gnu.org; Sun, 28 Feb 2021 14:59:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Pip Cet Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 28 Feb 2021 19:59:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46834 X-GNU-PR-Package: emacs Original-Received: via spool by 46834-submit@debbugs.gnu.org id=B46834.161454232326812 (code B ref 46834); Sun, 28 Feb 2021 19:59:01 +0000 Original-Received: (at 46834) by debbugs.gnu.org; 28 Feb 2021 19:58:43 +0000 Original-Received: from localhost ([127.0.0.1]:47324 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lGSDC-0006yO-SE for submit@debbugs.gnu.org; Sun, 28 Feb 2021 14:58:43 -0500 Original-Received: from mail-ot1-f52.google.com ([209.85.210.52]:37511) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lGSDB-0006yA-Mp for 46834@debbugs.gnu.org; Sun, 28 Feb 2021 14:58:42 -0500 Original-Received: by mail-ot1-f52.google.com with SMTP id g8so10772350otk.4 for <46834@debbugs.gnu.org>; Sun, 28 Feb 2021 11:58:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=9yNo2JH6/bfLZnanuZ8nFswmnoaZvWIn2b4/FRlCXKM=; b=p7TKtepXU/FxOi/9mg7RM7qNBuK0198JzdPJ/svHAizFcblhj+GB6tTL5XxDAnf3w/ getFlERp2TUr4zZE5VH3CtRu9cRngl0PGVYGjS6lyEDWPSss3lw7LdpwXzWryIS3Zav7 uTjMd0rqDxx+G4ojt6JajP0e+3AFOda1qevVlMTZLDikCPmkg4lrONB7AxzGvt/nit2x H3/hmDoMWUFKDuVmt547hy3imbcXc8JbsL9QrLIpx4de1FYs7jHKY5V95/8RCa930bry HFSxl5YUJsETx8lCr9iJpi266BKr90+M2XBA4VsTQewisD1OguVD/qFoZApc+1MaAPR0 9O+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=9yNo2JH6/bfLZnanuZ8nFswmnoaZvWIn2b4/FRlCXKM=; b=Ddc2Iim39QZgPlSQVTGnML9Ac1lWTQ6ntpR8miWBPQxovow+PW1reKzjE/zq6bcvOA eThTA2oUYgvfVVDkTYiX7kKBab/g3bAZdx/4lpM7NA0FxGugZ1F+Vf1GA+HoBpLG0HHq V8XsfHubHgBZIBeT2AmiZRKOYE2icPhbc/Kd5ts0cNyuqJ4Q5jDuSxLY8n8sab13DLMl UDywkR0IyUBSOUJINNV9wCJGvu3rtVDvjU0ncTV0QzanPpcj/6mdn3Iuc4l6m91E6Ryu ZvhbmePkwCR4HL5xzP6AcnrNogQbjnhlKOCflZfQlCVT8nhuAFEZmr/VFDeT4kacmhuw cOKg== X-Gm-Message-State: AOAM532xZZI6VzZmZhyP3QI/vcddilvMtR9uyggl5ro0OUOldALRvJlY tnUlDbVYztuWNOcfDoEUrnkAM/SVRon9nmT/050JH7ueF+s= X-Google-Smtp-Source: ABdhPJyJnHEsnmBN5XeLN1Cst9Zyf4kcxaxMx6iJPRKDLXtJwpwXmgPDwQ1hnFL1L3ULjhXF+G0QUrxEcP9YJ2X9SiE= X-Received: by 2002:a05:6830:3090:: with SMTP id f16mr10628483ots.292.1614542315942; Sun, 28 Feb 2021 11:58:35 -0800 (PST) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:201026 Archived-At: --000000000000378e7405bc6aedd5 Content-Type: text/plain; charset="UTF-8" On Sun, Feb 28, 2021 at 6:08 PM Pip Cet wrote: > (My apologies if this is well-known, documented, or plain stupid on my > part, but I think it's an interesting gotcha. Feel free to close > immediately in those cases.) > > Steps to reproduce from emacs -Q: > Evaluate the following in a lexically-bound Emacs Lisp buffer: > > (byte-compile (let ((l 0)) (lambda () (cl-incf l)))) > > Expected result: > > A byte code object which will increment its return value by one every > time it is called. > > Actual result: > > A byte code object which always returns 1. So, investigating a little, byte-compile--reify-function does not do, and as far as I can tell has never done, what it claims to do in its docstring. (byte-compile--reify-function (let ((x 0)) (lambda () (cl-incf x)))) => (lambda nil (let ((x '0)) (setq x (1+ x)))) Obviously, the closure generated on the LHS is not equivalent to that generated by evaluating the RHS. Also, while we're there: (byte-compile--reify-function (let ((x 0)) (let ((x 1)) (lambda () x)))) => (lambda nil (let ((x '1) (x '0)) x)) The closure on the LHS returns 1 (correctly); the transformed closure generated by evaluating the RHS returns 0. Patch attached. I've looked through the generated bytecode for all of lisp/ and there appear to be no significant differences. Pip --000000000000378e7405bc6aedd5 Content-Type: application/x-patch; name="0001-Compile-closures-that-modify-their-bound-vars-correc.patch" Content-Disposition: attachment; filename="0001-Compile-closures-that-modify-their-bound-vars-correc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_klpkkgzy0 RnJvbSAzODRlMTM0ZWUzMmI5NjZmNDcwZmIxZjYxOGQ2Njk5YTM2ZmU0M2M4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaXAgQ2V0IDxwaXBjZXRAZ21haWwuY29tPgpEYXRlOiBTdW4s IDI4IEZlYiAyMDIxIDE5OjQzOjA5ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gQ29tcGlsZSBjbG9z dXJlcyB0aGF0IG1vZGlmeSB0aGVpciBib3VuZCB2YXJzIGNvcnJlY3RseQogKEJ1ZyM0NjgzNCkK CiogbGlzcC9lbWFjcy1saXNwL2J5dGVjb21wLmVsIChieXRlLWNvbXBpbGUtLXJlaWZ5LWZ1bmN0 aW9uKToKRG9uJ3QgbW92ZSBsZXQgYmluZGluZ3MgaW50byB0aGUgbGFtYmRhLiBEb24ndCByZXZl cnNlIGxpc3Qgb2YKYmluZGluZ3MuCi0tLQogbGlzcC9lbWFjcy1saXNwL2J5dGVjb21wLmVsIHwg OCArKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvYnl0ZWNvbXAuZWwgYi9saXNwL2VtYWNz LWxpc3AvYnl0ZWNvbXAuZWwKaW5kZXggYTJmZTM3YTFlZTU4Ni4uN2QwMGI0NTNjYWYxYyAxMDA2 NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL2J5dGVjb21wLmVsCisrKyBiL2xpc3AvZW1hY3MtbGlz cC9ieXRlY29tcC5lbApAQCAtMjc4NSwxNiArMjc4NSwxMiBAQCBieXRlLWNvbXBpbGUtLXJlaWZ5 LWZ1bmN0aW9uCiAgICAgKGRvbGlzdCAoYmluZGluZyBlbnYpCiAgICAgICAoY29uZAogICAgICAg ICgoY29uc3AgYmluZGluZykKLSAgICAgICAgOzsgV2UgY2hlY2sgc2hhZG93aW5nIGJ5IHRoZSBh cmdzLCBzbyB0aGF0IHRoZSBgbGV0JyBjYW4gYmUgbW92ZWQKLSAgICAgICAgOzsgd2l0aGluIHRo ZSBsYW1iZGEsIHdoaWNoIGNhbiB0aGVuIGJlIHVuZm9sZGVkLiAgRklYTUU6IFNvbWUgb2YgdGhv c2UKLSAgICAgICAgOzsgYmluZGluZ3MgbWlnaHQgYmUgdW51c2VkIGluIGBib2R5Jy4KLSAgICAg ICAgKHVubGVzcyAobWVtcSAoY2FyIGJpbmRpbmcpIGFyZ3MpIDtTaGFkb3dlZC4KLSAgICAgICAg ICAocHVzaCBgKCwoY2FyIGJpbmRpbmcpICcsKGNkciBiaW5kaW5nKSkgcmVudikpKQorICAgICAg ICAocHVzaCBgKCwoY2FyIGJpbmRpbmcpICcsKGNkciBiaW5kaW5nKSkgcmVudikpCiAgICAgICAg KChlcSBiaW5kaW5nIHQpKQogICAgICAgICh0IChwdXNoIGAoZGVmdmFyICxiaW5kaW5nKSBib2R5 KSkpKQogICAgIChpZiAobnVsbCByZW52KQogICAgICAgICBgKGxhbWJkYSAsYXJncyAsQHByZWFt YmxlICxAYm9keSkKLSAgICAgIGAobGFtYmRhICxhcmdzICxAcHJlYW1ibGUgKGxldCAsKG5yZXZl cnNlIHJlbnYpICxAYm9keSkpKSkpCisgICAgICBgKGxldCAscmVudiAobGFtYmRhICxhcmdzICxA cHJlYW1ibGUgLEBib2R5KSkpKSkKIAwKIDs7OyMjI2F1dG9sb2FkCiAoZGVmdW4gYnl0ZS1jb21w aWxlIChmb3JtKQotLSAKMi4zMC4xCgo= --000000000000378e7405bc6aedd5--