From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Newsgroups: gmane.emacs.devel Subject: Warn about comparing quoted lists (etc) using `eq` Date: Wed, 14 Dec 2022 19:17:07 +0100 Message-ID: <8D624413-5A6C-46D7-A4EB-53C23F7CC4D3@gmail.com> Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.13\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_D92A212F-7B7B-4E28-9AC2-2E6C522FADF6" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="40877"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Dec 14 19:25:46 2022 Return-path: Envelope-to: ged-emacs-devel@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 1p5WRu-000AQA-5K for ged-emacs-devel@m.gmane-mx.org; Wed, 14 Dec 2022 19:25:46 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p5WRL-0001uz-Ax; Wed, 14 Dec 2022 13:25:11 -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 1p5WJg-00007C-RQ for emacs-devel@gnu.org; Wed, 14 Dec 2022 13:17:17 -0500 Original-Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p5WJe-0002KZ-Ss for emacs-devel@gnu.org; Wed, 14 Dec 2022 13:17:16 -0500 Original-Received: by mail-lj1-x22e.google.com with SMTP id h10so7449698ljk.11 for ; Wed, 14 Dec 2022 10:17:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:date:message-id:subject:mime-version:from:sender:from:to:cc :subject:date:message-id:reply-to; bh=1JWX2JM2e23um0ABn+vRB6hXTucWUQ9CfrnA1Q31yJU=; b=ND+ZxDSn7iuRV+jRtAQy/YT/CDTA9I237ycB40R/2mmzPX0Xr9TvlufrL+3Ab/mpuh q7RPEPvARBgKiI2+UUPVq3kWa1rj/hLwYAzP2VP1flfTzVv+e3g2ff3WhkInGCwzeEc+ n7Me8Dry6mD9jaoSob9kmPnEEejgt6TPrOA5uHoXBnkzJhubM/H50DPqPjKIMY5oYvhq 7HV/qnOoamv/XfkXR3Yl8rq7r353obVGizFYpYA1SCbJBM+2g33mblnZjLVS4CbYxRsC wYpkoyxwp2ev/wZx//s/yXGGdhKXKSIR7WKaRfwXReDFOrBJ9N6XLf5DW73uixPaewfg wM/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:date:message-id:subject:mime-version:from:sender :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1JWX2JM2e23um0ABn+vRB6hXTucWUQ9CfrnA1Q31yJU=; b=mbM8Goq6A46prvOrs/vlOY+PbT4CSCzOUXC9P7LaISGqBmVe+Sn8+91EJDL0eLiaEw Xm83kJLOpc3Dgq5EL26ROGQi/ZOmnSayfVJyGOS5NU/eIW5BnlyBJ8c1zCeCGB9aviAO 3WBq3te4fvmiiPDcTFza6YiiVaPV47FXP76vQH/oFfc4DnGA6OCOsRgKUWhS7ww9jPcU WoQge2rBYV3l/75iakhO51416r6vL8fG7LS2uSzHIVo5xozg/T/ohRsdyDYGpNfr7Jes PXUSRt2D486nbxppHPzqK1MfOZBDlMxaoDa5HHBCncX3F4Zpy+ox/eHB1VuIQwtdM36N Pkgw== X-Gm-Message-State: ANoB5pmeHfhwULjTr3sFbYwHT892Bm6xrYzImXiUxMcdLinH6DgZ+Gpw 80wFageeUEjbGs0HTX8+RJi01dPGDKI= X-Google-Smtp-Source: AA0mqf5ue26NTvZ8Fy63l0hfl9A58Co4hNFTlqnqdsgGsWEkLUDEZc3Jbo+Vqx4QQ89a/8fHX9vgXA== X-Received: by 2002:a05:651c:12ca:b0:277:9fc:5927 with SMTP id 10-20020a05651c12ca00b0027709fc5927mr6126875lje.0.1671041828602; Wed, 14 Dec 2022 10:17:08 -0800 (PST) Original-Received: from smtpclient.apple (c188-150-171-209.bredband.tele2.se. [188.150.171.209]) by smtp.gmail.com with ESMTPSA id i10-20020a2ea36a000000b0027a2a26a655sm228783ljn.8.2022.12.14.10.17.07 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Dec 2022 10:17:08 -0800 (PST) X-Mailer: Apple Mail (2.3654.120.0.1.13) Received-SPF: pass client-ip=2a00:1450:4864:20::22e; envelope-from=mattias.engdegard@gmail.com; helo=mail-lj1-x22e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Wed, 14 Dec 2022 13:25:07 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:301402 Archived-At: --Apple-Mail=_D92A212F-7B7B-4E28-9AC2-2E6C522FADF6 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii I'm about to push a new byte-compiler warning that finds mistakes like (eq x '(ho hum)) Ie, attempts to compare, by identity, literals that may not match = anything at all: quoted lists, strings, floats etc. The warning finds about 20 such mistakes in the Emacs tree, including = two by this programmer. So far no false positives have turned up, = although not all warnings indicate actual bugs (many things just happen = to work by luck). Typically the remedy is to use equal instead of eq, = and so on. The warning applies to arguments in calls to eq, eql, memq, memql, assq, = rassq, remq and delq. Given its usefulness and low risk (it does not actually change the = behaviour of anything) I suggest it be added to the emacs-29 branch. = Objections? (Clearly we'd like to fix the mistakes found in emacs-29, = and doing so is a lot more convenient if the warning is actually there = too.) Patch below for reference. I don't think it merits a NEWS entry but = could certainly add one. --Apple-Mail=_D92A212F-7B7B-4E28-9AC2-2E6C522FADF6 Content-Disposition: attachment; filename=0001-Warn-about-unmatchable-constant-args-to-eq-memq-etc.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Warn-about-unmatchable-constant-args-to-eq-memq-etc.patch" Content-Transfer-Encoding: quoted-printable =46rom=2065a701d7c9ecbdd810f94a18786f73e81e31f391=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Wed,=2014=20Dec=202022=2017:48:17=20+0100=0A= Subject:=20[PATCH]=20Warn=20about=20unmatchable=20constant=20args=20to=20= `eq`,=20`memq`=20etc=0A=0AAdd=20a=20byte-compiler=20warning=20about=20= attempts=20to=20compare=20literal=20values=0Awith=20undefined=20identity=20= relation=20to=20other=20values.=20=20For=20example:=0A=0A=20=20(eq=20x=20= 2.0)=0A=20=20(memq=20x=20'("a"=20(b)=20[c]))=0A=0ASuch=20incomparable=20= values=20include=20all=20literal=20conses,=20strings,=20vectors,=0A= records=20and=20(except=20for=20eql=20and=20memql)=20floats=20and=20= bignums.=0AThe=20warning=20currently=20applies=20to=20eq,=20eql,=20memq,=20= memql,=20assq,=20rassq,=0Aremq=20and=20delq.=0A=0A*=20= lisp/emacs-lisp/bytecomp.el=20(bytecomp--dodgy-eq-arg)=0A= (bytecomp--value-type-description,=20bytecomp--arg-type-description)=0A= (bytecomp--warn-dodgy-eq-arg,=20bytecomp--check-eq-args)=0A= (bytecomp--check-memq-args):=20New.=0A(eq,=20eql,=20memq,=20memql,=20= assq,=20rassq,=20remq,=20delq):=0ASet=20compiler-macro=20property.=0A*=20= lisp/emacs-lisp/byte-run.el=20(with-suppressed-warnings):=0AAmend=20doc=20= string.=0A*=20test/lisp/emacs-lisp/bytecomp-tests.el=0A= (bytecomp--with-warning-test):=20Fix=20text-quoting-style=20and=20expand=0A= re-warning=20so=20that=20it=20doesn't=20need=20to=20be=20a=20literal.=0A= (bytecomp-warn-dodgy-args-eq,=20bytecomp-warn-dodgy-args-memq):=0ANew=20= tests.=0A---=0A=20lisp/emacs-lisp/byte-run.el=20=20=20=20=20=20=20=20=20=20= =20=20|=20=203=20+-=0A=20lisp/emacs-lisp/bytecomp.el=20=20=20=20=20=20=20= =20=20=20=20=20|=2074=20++++++++++++++++++++++++++=0A=20= test/lisp/emacs-lisp/bytecomp-tests.el=20|=2054=20+++++++++++++++++--=0A=20= 3=20files=20changed,=20127=20insertions(+),=204=20deletions(-)=0A=0Adiff=20= --git=20a/lisp/emacs-lisp/byte-run.el=20b/lisp/emacs-lisp/byte-run.el=0A= index=201babf3ec2c..b5e887db83=20100644=0A---=20= a/lisp/emacs-lisp/byte-run.el=0A+++=20b/lisp/emacs-lisp/byte-run.el=0A@@=20= -653,7=20+653,8=20@@=20with-suppressed-warnings=0A=20`suspicious'.=0A=20=0A= =20For=20the=20`mapcar'=20case,=20only=20the=20`mapcar'=20function=20can=20= be=20used=20in=0A-the=20symbol=20list.=20=20For=20`suspicious',=20only=20= `set-buffer'=20and=20`lsh'=20can=20be=20used."=0A+the=20symbol=20list.=20= =20For=20`suspicious',=20only=20`set-buffer',=20`lsh'=20and=20`eq'=0A= +can=20be=20used."=0A=20=20=20;;=20Note:=20during=20compilation,=20this=20= definition=20is=20overridden=20by=20the=20one=20in=0A=20=20=20;;=20= byte-compile-initial-macro-environment.=0A=20=20=20(declare=20(debug=20= (sexp=20body))=20(indent=201))=0Adiff=20--git=20= a/lisp/emacs-lisp/bytecomp.el=20b/lisp/emacs-lisp/bytecomp.el=0Aindex=20= f176e769bf..9af32102c0=20100644=0A---=20a/lisp/emacs-lisp/bytecomp.el=0A= +++=20b/lisp/emacs-lisp/bytecomp.el=0A@@=20-5487,6=20+5487,80=20@@=20= batch-byte-recompile-directory=0A=20=20=20=20=20=20=20=20=20=20=20=20= (eval=20form)=0A=20=20=20=20=20=20=20=20=20=20form)))=0A=20=0A+;;=20= Check=20for=20(in)comparable=20constant=20values=20in=20calls=20to=20= `eq',=20`memq'=20etc.=0A+=0A+(defun=20bytecomp--dodgy-eq-arg=20(x=20= number-ok)=0A+=20=20"Whether=20X=20is=20a=20bad=20argument=20to=20`eq'=20= (or=20`eql'=20if=20NUMBER-OK=20is=20non-nil)."=0A+=20=20(cond=20((consp=20= x)=20(and=20(eq=20(car=20x)=20'quote)=20(consp=20(cadr=20x))))=0A+=20=20=20= =20=20=20=20=20((symbolp=20x)=20nil)=0A+=20=20=20=20=20=20=20=20= ((integerp=20x)=20(not=20(or=20(<=3D=20-536870912=20x=20536870911)=20= number-ok)))=0A+=20=20=20=20=20=20=20=20((floatp=20x)=20(not=20= number-ok))=0A+=20=20=20=20=20=20=20=20(t=20t)))=0A+=0A+(defun=20= bytecomp--value-type-description=20(x)=0A+=20=20(cond=20((and=20x=20= (proper-list-p=20x))=20"list")=0A+=20=20=20=20=20=20=20=20((recordp=20x)=20= "record")=0A+=20=20=20=20=20=20=20=20(t=20(symbol-name=20(type-of=20= x)))))=0A+=0A+(defun=20bytecomp--arg-type-description=20(x)=0A+=20=20= (bytecomp--value-type-description=0A+=20=20=20(if=20(and=20(consp=20x)=20= (eq=20(car=20x)=20'quote))=0A+=20=20=20=20=20=20=20(cadr=20x)=0A+=20=20=20= =20=20x)))=0A+=0A+(defun=20bytecomp--warn-dodgy-eq-arg=20(form=20type=20= parenthesis)=0A+=20=20(macroexp-warn-and-return=0A+=20=20=20(format=20= "`%s'=20called=20with=20literal=20%s=20that=20may=20never=20match=20= (%s)"=0A+=20=20=20=20=20=20=20=20=20=20=20(car=20form)=20type=20= parenthesis)=0A+=20=20=20form=20'(suspicious=20eq)=20t))=0A+=0A+(defun=20= bytecomp--check-eq-args=20(form=20a=20b=20&rest=20_ignore)=0A+=20=20= (let*=20((number-ok=20(eq=20(car=20form)=20'eql))=0A+=20=20=20=20=20=20=20= =20=20(bad-arg=20(cond=20((bytecomp--dodgy-eq-arg=20a=20number-ok)=201)=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= ((bytecomp--dodgy-eq-arg=20b=20number-ok)=202))))=0A+=20=20=20=20(if=20= bad-arg=0A+=20=20=20=20=20=20=20=20(bytecomp--warn-dodgy-eq-arg=0A+=20=20= =20=20=20=20=20=20=20form=0A+=20=20=20=20=20=20=20=20=20= (bytecomp--arg-type-description=20(nth=20bad-arg=20form))=0A+=20=20=20=20= =20=20=20=20=20(format=20"arg=20%d"=20bad-arg))=0A+=20=20=20=20=20=20= form)))=0A+=0A+(put=20'eq=20=20'compiler-macro=20= #'bytecomp--check-eq-args)=0A+(put=20'eql=20'compiler-macro=20= #'bytecomp--check-eq-args)=0A+=0A+(defun=20bytecomp--check-memq-args=20= (form=20elem=20list=20&rest=20_ignore)=0A+=20=20(let*=20((fn=20(car=20= form))=0A+=20=20=20=20=20=20=20=20=20(number-ok=20(eq=20fn=20'memql)))=0A= +=20=20=20=20(cond=0A+=20=20=20=20=20((bytecomp--dodgy-eq-arg=20elem=20= number-ok)=0A+=20=20=20=20=20=20(bytecomp--warn-dodgy-eq-arg=0A+=20=20=20= =20=20=20=20form=20(bytecomp--arg-type-description=20elem)=20"arg=201"))=0A= +=20=20=20=20=20((and=20(consp=20list)=20(eq=20(car=20list)=20'quote)=0A= +=20=20=20=20=20=20=20=20=20=20=20(proper-list-p=20(cadr=20list)))=0A+=20= =20=20=20=20=20(named-let=20loop=20((elts=20(cadr=20list))=20(i=201))=0A= +=20=20=20=20=20=20=20=20(if=20elts=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (let*=20((elt=20(car=20elts))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(x=20(cond=20((eq=20fn=20'assq)=20(car-safe=20elt))=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=20= =20=20((eq=20fn=20'rassq)=20(cdr-safe=20elt))=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=20=20=20(t=20elt))))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(or=20(symbolp=20x)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20= (integerp=20x)=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=20=20(or=20(<=3D=20-536870912=20x=20536870911)=20= number-ok))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(and=20(floatp=20x)=20number-ok))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(loop=20(cdr=20elts)=20(1+=20i))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(bytecomp--warn-dodgy-eq-arg=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20form=20= (bytecomp--value-type-description=20x)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(format=20"element=20%d=20of=20arg=202"=20i))))=0A+=20=20= =20=20=20=20=20=20=20=20form)))=0A+=20=20=20=20=20(t=20form))))=0A+=0A= +(put=20'memq=20=20'compiler-macro=20#'bytecomp--check-memq-args)=0A= +(put=20'memql=20'compiler-macro=20#'bytecomp--check-memq-args)=0A+(put=20= 'assq=20=20'compiler-macro=20#'bytecomp--check-memq-args)=0A+(put=20= 'rassq=20'compiler-macro=20#'bytecomp--check-memq-args)=0A+(put=20'remq=20= =20'compiler-macro=20#'bytecomp--check-memq-args)=0A+(put=20'delq=20=20= 'compiler-macro=20#'bytecomp--check-memq-args)=0A+=0A=20(provide=20= 'byte-compile)=0A=20(provide=20'bytecomp)=0A=20=0Adiff=20--git=20= a/test/lisp/emacs-lisp/bytecomp-tests.el=20= b/test/lisp/emacs-lisp/bytecomp-tests.el=0Aindex=20= e7c308213e..00361a4286=20100644=0A---=20= a/test/lisp/emacs-lisp/bytecomp-tests.el=0A+++=20= b/test/lisp/emacs-lisp/bytecomp-tests.el=0A@@=20-837,9=20+837,11=20@@=20= bytecomp--with-warning-test=0A=20=20=20(declare=20(indent=201))=0A=20=20=20= `(with-current-buffer=20(get-buffer-create=20"*Compile-Log*")=0A=20=20=20= =20=20=20(let=20((inhibit-read-only=20t))=20(erase-buffer))=0A-=20=20=20=20= =20(byte-compile=20,@form)=0A-=20=20=20=20=20(ert-info=20= ((prin1-to-string=20(buffer-string))=20:prefix=20"buffer:=20")=0A-=20=20=20= =20=20=20=20(should=20(re-search-forward=20,(string-replace=20"=20"=20"[=20= \n]+"=20re-warning))))))=0A+=20=20=20=20=20(let=20((text-quoting-style=20= 'grave))=0A+=20=20=20=20=20=20=20(byte-compile=20,@form)=0A+=20=20=20=20=20= =20=20(ert-info=20((prin1-to-string=20(buffer-string))=20:prefix=20= "buffer:=20")=0A+=20=20=20=20=20=20=20=20=20(should=20(re-search-forward=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-replace=20= "=20"=20"[=20\n]+"=20,re-warning)))))))=0A=20=0A=20(ert-deftest=20= bytecomp-warn-wrong-args=20()=0A=20=20=20(bytecomp--with-warning-test=20= "remq.*3.*2"=0A@@=20-863,6=20+865,52=20@@=20= bytecomp-warn-wide-docstring/defvar=0A=20=20=20= (bytecomp--with-warning-test=20"defvar.*foo.*wider=20than.*characters"=0A= =20=20=20=20=20`(defvar=20foo=20t=20,bytecomp-tests--docstring)))=0A=20=0A= +(ert-deftest=20bytecomp-warn-dodgy-args-eq=20()=0A+=20=20(dolist=20(fn=20= '(eq=20eql))=0A+=20=20=20=20(cl-flet=20((msg=20(type=20arg)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(format=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"`%s'=20called=20with=20literal=20%s=20that=20= may=20never=20match=20(arg=20%d)"=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20fn=20type=20arg)))=0A+=20=20=20=20=20=20= (bytecomp--with-warning-test=20(msg=20"list"=201)=20=20=20`(,fn=20'(a)=20= 'x))=0A+=20=20=20=20=20=20(bytecomp--with-warning-test=20(msg=20"string"=20= 2)=20`(,fn=20'x=20"a"))=0A+=20=20=20=20=20=20= (bytecomp--with-warning-test=20(msg=20"vector"=202)=20`(,fn=20'x=20[a]))=0A= +=20=20=20=20=20=20(unless=20(eq=20fn=20'eql)=0A+=20=20=20=20=20=20=20=20= (bytecomp--with-warning-test=20(msg=20"integer"=202)=20`(,fn=20'x=20= #x10000000000))=0A+=20=20=20=20=20=20=20=20(bytecomp--with-warning-test=20= (msg=20"float"=202)=20=20=20`(,fn=20'x=201.0))))))=0A+=0A+(ert-deftest=20= bytecomp-warn-dodgy-args-memq=20()=0A+=20=20(dolist=20(fn=20'(memq=20= memql=20remq=20delq=20assq=20rassq))=0A+=20=20=20=20(cl-labels=0A+=20=20=20= =20=20=20=20=20((msg1=20(type)=0A+=20=20=20=20=20=20=20=20=20=20=20= (format=0A+=20=20=20=20=20=20=20=20=20=20=20=20"`%s'=20called=20with=20= literal=20%s=20that=20may=20never=20match=20(arg=201)"=0A+=20=20=20=20=20= =20=20=20=20=20=20=20fn=20type))=0A+=20=20=20=20=20=20=20=20=20(msg2=20= (type)=0A+=20=20=20=20=20=20=20=20=20=20=20(format=0A+=20=20=20=20=20=20=20= =20=20=20=20=20"`%s'=20called=20with=20literal=20%s=20that=20may=20never=20= match=20(element=202=20of=20arg=202)"=0A+=20=20=20=20=20=20=20=20=20=20=20= =20fn=20type))=0A+=20=20=20=20=20=20=20=20=20(lst=20(elt)=0A+=20=20=20=20= =20=20=20=20=20=20=20(cond=20((eq=20fn=20'assq)=20=20`((a=20.=201)=20= (,elt=20.=202)=20(c=20.=203)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20((eq=20fn=20'rassq)=20`((1=20.=20a)=20(2=20.=20,elt)=20(3=20= .=20c)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=20=20=20= =20=20=20=20=20=20=20=20=20=20=20`(a=20=20=20=20=20=20=20,elt=20=20=20=20= =20=20=20c))))=0A+=20=20=20=20=20=20=20=20=20(form2=20(elt)=0A+=20=20=20=20= =20=20=20=20=20=20=20`(,fn=20'x=20',(lst=20elt))))=0A+=0A+=20=20=20=20= (bytecomp--with-warning-test=20(msg1=20"list")=20=20=20`(,fn=20'(a)=20= '(x)))=0A+=20=20=20=20(bytecomp--with-warning-test=20(msg1=20"string")=20= `(,fn=20"a"=20'(x)))=0A+=20=20=20=20(bytecomp--with-warning-test=20(msg1=20= "vector")=20`(,fn=20[a]=20'(x)))=0A+=20=20=20=20(unless=20(eq=20fn=20= 'memql)=0A+=20=20=20=20=20=20(bytecomp--with-warning-test=20(msg1=20= "integer")=20`(,fn=20#x10000000000=20'(x)))=0A+=20=20=20=20=20=20= (bytecomp--with-warning-test=20(msg1=20"float")=20=20=20`(,fn=201.0=20= '(x))))=0A+=0A+=20=20=20=20(bytecomp--with-warning-test=20(msg2=20= "list")=20=20=20(form2=20'(b)))=0A+=20=20=20=20= (bytecomp--with-warning-test=20(msg2=20"list")=20=20=20(form2=20''b))=0A= +=20=20=20=20(bytecomp--with-warning-test=20(msg2=20"string")=20(form2=20= "b"))=0A+=20=20=20=20(bytecomp--with-warning-test=20(msg2=20"vector")=20= (form2=20[b]))=0A+=20=20=20=20(unless=20(eq=20fn=20'memql)=0A+=20=20=20=20= =20=20(bytecomp--with-warning-test=20(msg2=20"integer")=20(form2=20= #x10000000000))=0A+=20=20=20=20=20=20(bytecomp--with-warning-test=20= (msg2=20"float")=20=20=20(form2=201.0))))))=0A+=0A=20(defmacro=20= bytecomp--define-warning-file-test=20(file=20re-warning=20&optional=20= reverse)=0A=20=20=20`(ert-deftest=20,(intern=20(format=20"bytecomp/%s"=20= file))=20()=0A=20=20=20=20=20=20(with-current-buffer=20= (get-buffer-create=20"*Compile-Log*")=0A--=20=0A2.32.0=20(Apple=20= Git-132)=0A=0A= --Apple-Mail=_D92A212F-7B7B-4E28-9AC2-2E6C522FADF6--