From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Newsgroups: gmane.emacs.bugs Subject: bug#35770: [PATCH] Broken duplicate case elimination in switch byte-compilation Date: Fri, 17 May 2019 11:33:41 +0200 Message-ID: <91DFE4D0-BDB6-4365-BA51-A2A3F209177C@acm.org> Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.8\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_28FAA9A1-DA34-4AE0-BB57-883CEE6AD001" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="243806"; mail-complaints-to="usenet@blaine.gmane.org" Cc: Stefan Monnier , vibhavp@gmail.com To: 35770@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri May 17 11:34:17 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hRZFn-0011Cy-Jw for geb-bug-gnu-emacs@m.gmane.org; Fri, 17 May 2019 11:34:16 +0200 Original-Received: from localhost ([127.0.0.1]:45202 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZFm-0002mJ-BZ for geb-bug-gnu-emacs@m.gmane.org; Fri, 17 May 2019 05:34:14 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:38938) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZFb-0002kM-W3 for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:34:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZFa-0000Fq-U0 for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:34:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:43748) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hRZFa-0000Ff-QZ for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:34:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hRZFa-0002lE-N5 for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:34:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 17 May 2019 09:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 35770 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.155808564010598 (code B ref -1); Fri, 17 May 2019 09:34:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 17 May 2019 09:34:00 +0000 Original-Received: from localhost ([127.0.0.1]:57291 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hRZFY-0002ks-8w for submit@debbugs.gnu.org; Fri, 17 May 2019 05:34:00 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:52743) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hRZFW-0002ke-23 for submit@debbugs.gnu.org; Fri, 17 May 2019 05:33:58 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:48664) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZFQ-0000CY-U2 for submit@debbugs.gnu.org; Fri, 17 May 2019 05:33:52 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:38890) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRZFP-0002jS-Uz for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:33:52 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRZFM-0000A3-2u for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:33:51 -0400 Original-Received: from mail210c50.megamailservers.eu ([91.136.10.220]:47322 helo=mail194c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRZFL-00007j-FI for bug-gnu-emacs@gnu.org; Fri, 17 May 2019 05:33:48 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1558085624; bh=+L7vz4zocByZMnoi1w8L909baeBMoblUr6b7AzOLUPE=; h=From:Subject:Date:Cc:To:From; b=TavShym42JNszdeA59SNbbtzdo5QKsdROoSyEABrVmuLKicQd1UOjmMBFrYovMG0Q vsoDcujkGP3ROFTNoxlSj4LPnE2kCYsruQRYTiTl1FE/lWrHgBjNoATzziRXh6UlIR jokpjDAOCpvFi+/7GwowP+jm3z7mQaX2dP7E0fJE= Feedback-ID: mattiase@acm.or Original-Received: from [192.168.1.65] (c-e636e253.032-75-73746f71.bbcust.telenor.se [83.226.54.230]) (authenticated bits=0) by mail194c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id x4H9XgoQ003773; Fri, 17 May 2019 09:33:43 +0000 X-Mailer: Apple Mail (2.3445.104.8) X-CTCH-RefID: str=0001.0A0B0203.5CDE7FF8.0049, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=OuZhNR3t c=1 sm=1 tr=0 a=M+GU/qJco4WXjv8D6jB2IA==:117 a=M+GU/qJco4WXjv8D6jB2IA==:17 a=s-cE09NUrotFUW4v5I0A:9 a=CjuIK1q_8ugA:10 a=DS3PQjJmDWh4Nffbcd0A:9 a=B2y7HmGcmWMA:10 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:159437 Archived-At: --Apple-Mail=_28FAA9A1-DA34-4AE0-BB57-883CEE6AD001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii The byte-code compiler attempts to eliminate duplicated cases when = turning a `cond' into a switch table, as in (cond ((eq x 'a) 1) (eq x 'b) 2) (eq x 'a) 3)) ; remove but it doesn't work properly, because of a confusion between expressions = and their values, and a logic error that would have discarded the entire = table instead of just skipped the duplicate. This patch attempts to rectify that. I also removed a seemingly = redundant condition, the (consp condition), which should always be true = at that point. --Apple-Mail=_28FAA9A1-DA34-4AE0-BB57-883CEE6AD001 Content-Disposition: attachment; filename=0001-Correctly-eliminate-duplicate-cases-in-switch-compil.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Correctly-eliminate-duplicate-cases-in-switch-compil.patch" Content-Transfer-Encoding: quoted-printable =46rom=20adb7adf2271e65023adc0ce5d6251054b55c6452=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Fri,=2017=20May=202019=2011:25:06=20+0200=0A= Subject:=20[PATCH]=20Correctly=20eliminate=20duplicate=20cases=20in=20= switch=20compilation=0A=0AFix=20code=20mistakes=20that=20prevented=20the=20= correct=20elimination=20of=20duplicated=0Acases=20when=20compiling=20a=20= `cond'=20form=20to=20a=20switch=20bytecode,=20as=20in=0A=0A=20=20(cond=20= ((eq=20x=20'a)=201)=0A=20=20=20=20=20=20=20=20((eq=20x=20'b)=202)=0A=20=20= =20=20=20=20=20=20((eq=20x=20'a)=203))=20=20;=20should=20be=20elided=0A=0A= *=20lisp/emacs-lisp/bytecomp.el=20(byte-compile-cond-vars):=20Return=20= obj2=20eval'ed.=0A(byte-compile-cond-jump-table-info):=0ADiscard=20= redundant=20condition.=20=20Use=20`obj2'=20as=20evaluated.=0ADiscard=20= duplicated=20cases=20instead=20of=20failing=20the=20table=20generation.=0A= ---=0A=20lisp/emacs-lisp/bytecomp.el=20|=2013=20++++++-------=0A=201=20= file=20changed,=206=20insertions(+),=207=20deletions(-)=0A=0Adiff=20= --git=20a/lisp/emacs-lisp/bytecomp.el=20b/lisp/emacs-lisp/bytecomp.el=0A= index=20e76baf5ed0..7f7cbe5a68=20100644=0A---=20= a/lisp/emacs-lisp/bytecomp.el=0A+++=20b/lisp/emacs-lisp/bytecomp.el=0A@@=20= -4091,8=20+4091,8=20@@=20that=20suppresses=20all=20warnings=20during=20= execution=20of=20BODY."=0A=20=20=20;;=20and=20the=20other=20is=20a=20= constant=20expression=20whose=20value=20can=20be=0A=20=20=20;;=20= compared=20with=20`eq'=20(with=20`macroexp-const-p').=0A=20=20=20(or=0A-=20= =20=20(and=20(symbolp=20obj1)=20(macroexp-const-p=20obj2)=20(cons=20obj1=20= obj2))=0A-=20=20=20(and=20(symbolp=20obj2)=20(macroexp-const-p=20obj1)=20= (cons=20obj2=20obj1))))=0A+=20=20=20(and=20(symbolp=20obj1)=20= (macroexp-const-p=20obj2)=20(cons=20obj1=20(eval=20obj2)))=0A+=20=20=20= (and=20(symbolp=20obj2)=20(macroexp-const-p=20obj1)=20(cons=20obj2=20= (eval=20obj1)))))=0A=20=0A=20(defconst=20byte-compile--default-val=20= (cons=20nil=20nil)=20"A=20unique=20object.")=0A=20=0A@@=20-4121,12=20= +4121,11=20@@=20Return=20a=20list=20of=20the=20form=20((TEST=20.=20VAR)=20= =20((VALUE=20BODY)=20...))"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(unless=20prev-test=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(setq=20prev-test=20test))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(if=20(and=20obj1=20(memq=20test=20'(eq=20eql=20equal))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(consp=20= condition)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(eq=20test=20prev-test)=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(eq=20obj1=20prev-var)=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= discard=20duplicate=20clauses=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(not=20(assq=20obj2=20cases)))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(push=20(list=20(if=20= (consp=20obj2)=20(eval=20obj2)=20obj2)=20body)=20cases)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(eq=20obj1=20= prev-var))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20discard=20duplicate=20clauses=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(unless=20(assq=20obj2=20cases)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(push=20(list=20obj2=20= body)=20cases))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20(and=20(macroexp-const-p=20condition)=20condition)=0A=20=09=09=20=20= =20=20=20(progn=20(push=20(list=20byte-compile--default-val=0A=20=09=09=09= =09=09(or=20body=20`(,condition)))=0A--=20=0A2.20.1=20(Apple=20Git-117)=0A= =0A= --Apple-Mail=_28FAA9A1-DA34-4AE0-BB57-883CEE6AD001--