From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.bugs Subject: bug#67116: byte-compile-let: reversing the order of evaluation of the clauses CAN make a difference. Date: Sat, 11 Nov 2023 22:48:43 +0000 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="27448"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Stefan Monnier To: 67116@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Nov 11 23:49:42 2023 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 1r1wnO-00072d-8H for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 11 Nov 2023 23:49:42 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r1wn7-0007I2-15; Sat, 11 Nov 2023 17:49:25 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r1wn4-0007Hn-GW for bug-gnu-emacs@gnu.org; Sat, 11 Nov 2023 17:49:22 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r1wn3-000676-JP for bug-gnu-emacs@gnu.org; Sat, 11 Nov 2023 17:49:22 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r1wnh-0001y9-Qk for bug-gnu-emacs@gnu.org; Sat, 11 Nov 2023 17:50:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 11 Nov 2023 22:50:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 67116 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16997429787527 (code B ref -1); Sat, 11 Nov 2023 22:50:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 11 Nov 2023 22:49:38 +0000 Original-Received: from localhost ([127.0.0.1]:54650 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r1wnK-0001xL-I4 for submit@debbugs.gnu.org; Sat, 11 Nov 2023 17:49:38 -0500 Original-Received: from lists.gnu.org ([2001:470:142::17]:49288) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r1wnI-0001x8-Ej for submit@debbugs.gnu.org; Sat, 11 Nov 2023 17:49:36 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r1wmY-0007Gc-Ai for bug-gnu-emacs@gnu.org; Sat, 11 Nov 2023 17:48:50 -0500 Original-Received: from mail.muc.de ([193.149.48.3]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r1wmV-0005cb-QO for bug-gnu-emacs@gnu.org; Sat, 11 Nov 2023 17:48:50 -0500 Original-Received: (qmail 80496 invoked by uid 3782); 11 Nov 2023 23:48:44 +0100 Original-Received: from acm.muc.de (p4fe151aa.dip0.t-ipconnect.de [79.225.81.170]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Sat, 11 Nov 2023 23:48:43 +0100 Original-Received: (qmail 10921 invoked by uid 1000); 11 Nov 2023 22:48:43 -0000 Content-Disposition: inline X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.3; envelope-from=acm@muc.de; helo=mail.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action 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-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:274176 Archived-At: Hello, Emacs. Emacs master branch. In lisp/emacs-lisp/bytecomp.el (byte-compile-let), when the following form (from jit-lock--debug-fontify): (let ((beg pos) (end (setq pos (next-single-property-change pos 'fontified nil (point-max))))) (put-text-property beg end 'fontified nil) (jit-lock-fontify-now beg end)) gets byte compiled, the order of evaluating BEG and END gets reversed so that END gets evaluated first. Since the value for END contains (setq pos ...), BEG gets this updated value of POS rather then the original intended value. This particular bug in jit-lock.el can be fixed by using let* rather than let, but this isn't the point. I believe (without testing) that the interpreted code for the form would evaluate BEG before END, hence testing it interpreted (e.g. under edebug) will give a false sense of correctness. The comment in byte-compile-let: ;; Bind the variables. ;; For `let', do it in reverse order, because it makes no ;; semantic difference, but it is a lot more efficient since the ;; values are now in reverse order on the stack. , is not true. It can make a semantic difference. So doing the binding in reverse order is a bug. -- Alan Mackenzie (Nuremberg, Germany).