From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: =?UTF-8?Q?Re=3a_master_b467bb5_4/4=3a_Minimize_=e2=80=98equal?= =?UTF-8?Q?=e2=80=99_calls_in_=28delete_x_vector=29?= Date: Sat, 15 Aug 2020 12:42:46 -0700 Organization: UCLA Computer Science Department Message-ID: References: <20200815181956.27401.76683@vcs0.savannah.gnu.org> <20200815181959.E7DC3209AC@vcs0.savannah.gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------9E98206D5BEA300D9B94DA58" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3507"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 Cc: emacs-devel@gnu.org To: Pip Cet Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Aug 15 21:43:52 2020 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 1k725o-0000o1-Md for ged-emacs-devel@m.gmane-mx.org; Sat, 15 Aug 2020 21:43:52 +0200 Original-Received: from localhost ([::1]:47528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k725n-0005Xv-Od for ged-emacs-devel@m.gmane-mx.org; Sat, 15 Aug 2020 15:43:51 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k724q-00054j-V9 for emacs-devel@gnu.org; Sat, 15 Aug 2020 15:42:52 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:40554) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k724o-0001P8-RB for emacs-devel@gnu.org; Sat, 15 Aug 2020 15:42:52 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 90B93160097; Sat, 15 Aug 2020 12:42:48 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id e98rx_AkPZ24; Sat, 15 Aug 2020 12:42:47 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 5CB1C1600BA; Sat, 15 Aug 2020 12:42:47 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id PfOUDBCPRsgs; Sat, 15 Aug 2020 12:42:47 -0700 (PDT) Original-Received: from [192.168.1.9] (cpe-75-82-69-226.socal.res.rr.com [75.82.69.226]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 2BE79160097; Sat, 15 Aug 2020 12:42:47 -0700 (PDT) Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkV5QWNtUUJFQURB QXlIMnhvVHU3cHBHNUQzYThGTVpFb243NGRDdmM0K3ExWEEySjJ0QnkycHdhVHFmCmhweHhk R0E5Smo1MFVKM1BENGJTVUVnTjh0TFowc2FuNDdsNVhUQUZMaTI0NTZjaVNsNW04c0thSGxH ZHQ5WG0KQUF0bVhxZVpWSVlYL1VGUzk2ZkR6ZjR4aEVtbS95N0xiWUVQUWRVZHh1NDd4QTVL aFRZcDVibHRGM1dZRHoxWQpnZDdneDA3QXV3cDdpdzdlTnZub0RUQWxLQWw4S1lEWnpiRE5D UUdFYnBZM2VmWkl2UGRlSStGV1FONFcra2doCnkrUDZhdTZQcklJaFlyYWV1YTdYRGRiMkxT MWVuM1NzbUUzUWpxZlJxSS9BMnVlOEpNd3N2WGUvV0szOEV6czYKeDc0aVRhcUkzQUZINmls QWhEcXBNbmQvbXNTRVNORnQ3NkRpTzFaS1FNcjlhbVZQa25qZlBtSklTcWRoZ0IxRApsRWR3 MzRzUk9mNlY4bVp3MHhmcVQ2UEtFNDZMY0ZlZnpzMGtiZzRHT1JmOHZqRzJTZjF0azVlVThN Qml5Ti9iClowM2JLTmpOWU1wT0REUVF3dVA4NGtZTGtYMndCeHhNQWhCeHdiRFZadWR6eERa SjFDMlZYdWpDT0pWeHEya2wKakJNOUVUWXVVR3FkNzVBVzJMWHJMdzYrTXVJc0hGQVlBZ1Jy NytLY3dEZ0JBZndoU In-Reply-To: Content-Language: en-US Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/15 14:48:13 X-ACL-Warn: Detected OS = Linux 3.1-3.10 X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 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" Xref: news.gmane.io gmane.emacs.devel:253821 Archived-At: This is a multi-part message in MIME format. --------------9E98206D5BEA300D9B94DA58 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 8/15/20 12:22 PM, Pip Cet wrote: > I'd prefer the attached: this is probably not worth worrying > too much about, so go with something straightforward? Thanks for the quick review and patch. I came up with something a bit simpler and installed the attached. It does bug me a bit that GCC generates bad code for 'NILP (Fequal (...))' here. I've been meaning to add a bool function equal (...) that would simplify the C source a bit and presumably let GCC do better, but that can wait. --------------9E98206D5BEA300D9B94DA58 Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-recently-introduced-Fdelete-bug.patch" Content-Disposition: attachment; filename="0001-Fix-recently-introduced-Fdelete-bug.patch" Content-Transfer-Encoding: quoted-printable >From 748afc183c2c44b7b2a582d3078cf3d8b4d5270a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 15 Aug 2020 12:32:56 -0700 Subject: [PATCH] Fix recently-introduced Fdelete bug MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit Problem reported by Pip Cet in: https://lists.gnu.org/r/emacs-devel/2020-08/msg00444.html * src/fns.c (Fdelete): Fix correctness bug via a simpler (though more memory-intensive) approach. It=E2=80=99s probably not worth optimizing the memory usage yere. * test/src/fns-tests.el (test-vector-delete): Add test for the bug. --- src/fns.c | 29 ++++------------------------- test/src/fns-tests.el | 1 + 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/src/fns.c b/src/fns.c index 069edbe90e..a3b8d6ef57 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1749,38 +1749,17 @@ DEFUN ("delete", Fdelete, Sdelete, 2, 2, 0, { ptrdiff_t n =3D 0; ptrdiff_t size =3D ASIZE (seq); - ptrdiff_t neqbits_words =3D ((size + BITS_PER_BITS_WORD - 1) - / BITS_PER_BITS_WORD); USE_SAFE_ALLOCA; - bits_word *neqbits =3D SAFE_ALLOCA (neqbits_words * sizeof *neqbit= s); - bits_word neqword =3D 0; + Lisp_Object *kept =3D SAFE_ALLOCA (size * sizeof *kept); =20 for (ptrdiff_t i =3D 0; i < size; i++) { - bool neq =3D NILP (Fequal (AREF (seq, i), elt)); - n +=3D neq; - neqbits[i / BITS_PER_BITS_WORD] =3D neqword =3D (neqword << 1) + neq; + kept[n] =3D AREF (seq, i); + n +=3D NILP (Fequal (AREF (seq, i), elt)); } =20 if (n !=3D size) - { - struct Lisp_Vector *p =3D allocate_vector (n); - - if (n !=3D 0) - { - ptrdiff_t j =3D 0; - for (ptrdiff_t i =3D 0; ; i++) - if (neqbits[i / BITS_PER_BITS_WORD] - & ((bits_word) 1 << (i % BITS_PER_BITS_WORD))) - { - p->contents[j++] =3D AREF (seq, i); - if (j =3D=3D n) - break; - } - } - - XSETVECTOR (seq, p); - } + seq =3D Fvector (n, kept); =20 SAFE_FREE (); } diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el index 141de1d226..400e912648 100644 --- a/test/src/fns-tests.el +++ b/test/src/fns-tests.el @@ -898,5 +898,6 @@ test-secure-hash =20 (ert-deftest test-vector-delete () (let ((v1 (make-vector 1000 1))) + (should (equal (delete t [nil t]) [nil])) (should (equal (delete 1 v1) (vector))) (should (equal (delete 2 v1) v1)))) --=20 2.17.1 --------------9E98206D5BEA300D9B94DA58--