From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: [Emacs-diffs] master 74f54af: Use eassume (false) for branch that's never taken. Date: Mon, 22 Apr 2019 17:52:32 -0700 Organization: UCLA Computer Science Department Message-ID: <27636c2b-549d-4e78-a1e3-af78605ebd1e@cs.ucla.edu> References: <83ftqecrms.fsf@gnu.org> <83ef5ycnny.fsf@gnu.org> <9b3a1717-64de-795a-2acf-0698576caf02@cs.ucla.edu> <83zholbvnb.fsf@gnu.org> <25791a2b-260e-9cee-b454-5d9f53fa33e0@cs.ucla.edu> <83r29xb3co.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="240357"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Cc: phst@google.com, p.stephani2@gmail.com, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Apr 23 02:52:59 2019 Return-path: Envelope-to: ged-emacs-devel@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 1hIjgA-0010OO-Nw for ged-emacs-devel@m.gmane.org; Tue, 23 Apr 2019 02:52:58 +0200 Original-Received: from localhost ([127.0.0.1]:46235 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hIjg9-0008Cm-GG for ged-emacs-devel@m.gmane.org; Mon, 22 Apr 2019 20:52:57 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:54396) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hIjfx-0008Cg-J6 for emacs-devel@gnu.org; Mon, 22 Apr 2019 20:52:46 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hIjfw-00065L-F9 for emacs-devel@gnu.org; Mon, 22 Apr 2019 20:52:45 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:33578) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hIjfr-00062c-2N; Mon, 22 Apr 2019 20:52:39 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 4C572161830; Mon, 22 Apr 2019 17:52:33 -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 al8C6gtmIRFU; Mon, 22 Apr 2019 17:52:32 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 6A0EC161831; Mon, 22 Apr 2019 17:52:32 -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 MFSWbI5Crz-Q; Mon, 22 Apr 2019 17:52:32 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 49348161599; Mon, 22 Apr 2019 17:52:32 -0700 (PDT) Openpgp: preference=signencrypt Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBfgQTAQIAKAUCTIByZAIbAwUJEswDAAYLCQgHAwIG FQgCCQoLBBYCAwECH In-Reply-To: <83r29xb3co.fsf@gnu.org> Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:235792 Archived-At: Eli Zaretskii wrote: > Anything's possible with bugs. AFAIU, that's what this discussion is > about. Because if it's_really_ impossible, then eassume has no place > there, either. Let me try to explain. eassume is designed for the situation where the programmer knows something that the compiler does not infer on its own, and where this knowledge can help the compiler produce better diagnostics or better code. Here is a toy example. Suppose GCC was so amazingly dumb that if you did this: { int i = 27; return 1000 / i; } then GCC warned "possible integer division by zero" and inserted a runtime check (just before the 'return' statement) that 'i' is nonzero. And suppose you could disable the warning (and improve performance) by doing this instead: { int i = 27; eassume (i == 27); return 1000 / i; } Would we reject this solution because "if it's _really_ impossible, then eassume has no place there"? No, because it really *is* impossible for i != 27 there; but in this (very contrived) example, eassume *does* have a place, namely to pacify the amazingly dumb compiler. The case that started this thread is similar, except that GCC is not as dumb as in the contrived example above. One might at first think that because the programmer might have made a mistake and it's better to be safe than sorry, we should replace instances of 'eassume (X);' with 'if (!X) emacs_abort ();' so that there is always a runtime check, even in production. But that would be overkill, for the same reason that replacing all instances of 'eassert (X);' with 'if (!X) emacs_abort ();' would be overkill. By the way, now that we have -fsanitize=undefined, it would be realistic to simplify Emacs by dropping 'eassume' and replacing all uses with plain 'assume', as modern compilers will do the runtime check for us automatically (if we use -fsanitize=reachable), and older compilers are kind of lost causes anyway.