From: Vibhav Pant <vibhavp@gmail.com>
To: Andreas Politz <politza@hochschule-trier.de>
Cc: 26047@debbugs.gnu.org, Leo Liu <sdl.web@gmail.com>
Subject: bug#26047: 26.0.50; emacs crash by cl-caff2
Date: Tue, 14 Mar 2017 23:48:44 +0530 [thread overview]
Message-ID: <CA+T2Sh3W5ThTJQ=KHdkSXXV5CLKFH=6vgs6yz2Z8=G-TvD6y9A@mail.gmail.com> (raw)
In-Reply-To: <87pohju3y9.fsf@luca>
Yes, I've been investigating for some time. For now, a workaround
would be to set byte-compile-cond-use-jump-table to nil before
compiling.
Thanks,
Vibhav
On Tue, Mar 14, 2017 at 11:37 PM, Andreas Politz
<politza@hochschule-trier.de> wrote:
>
> Using git bisect, I narrowed the cause of this down to the following
> list of commits, all of which deal with handling byte-code and have a
> single author.
>
> ----
> commit 19cb3985a3795539b51d70625904e95a6e581eef
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 01:00:41 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el:Use correct size for switch jump-table
> commit 4e6140b28324a9a63d54084c920206d00aed094e
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 01:02:16 2017 +0530
>
> * lisp/emacs-lisp/disass.el: Display jump tables for switch.
> commit c52a9b6ddd9166571e6bc8bb9426b0267874f9fa
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 00:58:36 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Simplify b-c-cond-valid-obj2-p
> commit 6a82d19db18f8480342cc4c1a0ad76c75df41941
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 14:28:23 2017 +0530
>
> * lisp/emacs-lisp/disass.el: Fix spacing while showing jump tables
> commit 8189b97e5ca12aff8ea34617431a868010643b5b
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 00:57:10 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Fix byte-switch codegen with symbols.
> commit 0d3c57dcf3187864c0b6fd6115ee80ad33faf553
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 00:54:59 2017 +0530
>
> * lisp/emacs-lisp/byte-opt.el: Add support for decompiling switch
>
> * lisp/emacs-lisp/byte-opt.el: (byte-decompile-bytecode-1) When the
> constant encountered precedes a byte-switch op, replace all the
> addresses in the jump table with tags.
> commit a7e4870f165e9fd36d5cfcabb19b215b94373602
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 14:31:16 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Use correct function to push nil
>
> * lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-jump-table) Use
> byte-compile-constant instead of byte-compile-form to push nil.
> commit 23a130ee0d61fc39cee157921679809017a02b39
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sat Jan 21 11:37:20 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Remove unused debugging statements.
> commit 25d38a06eceb0853190a2d9acf53d85686f524bd
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 26 23:03:02 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el:(bc-cond-jump-table-info)add docstring
> commit bf7f7c0d82a56ed1b76358657e74ca2833b19fe2
> Merge: 25d38a06ec 9c4dfdd1af
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Mon Jan 30 18:35:43 2017 +0530
>
> Merge remote-tracking branch 'origin/master' into feature/byte-switch
> commit fbe6b90b0ced594cf74d5fd0dc9a32666f0d7d38
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 19 23:13:53 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Fix errors with matching quoted forms
>
> * lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-jump-table-info)
> eval obj2 to avoid quoted forms being stored as is.
> commit 5f3379b33866ff7dc16856b6c29712eae860af0e
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 19 23:13:13 2017 +0530
>
> lisp/emacs-lisp/bytecomp.el: Use byte-switch only for quoted symbols
> commit f441451658ecb8d0d8ba386d9fd3eebf3b17d549
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Mon Jan 30 19:22:09 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Create jump tables with :purecopy t
> commit 46193d5209780d21b848374d8c377fb6c8896d1b
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 19 23:12:09 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Add default-case for last cond clause.
>
> * lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-jump-table) Add
> default-case for last cond clause.
> commit bfa88520136dd6b187ba101e6db5a5f8f0d5e874
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Wed Feb 1 18:15:59 2017 +0530
>
> Use maphash instead of cl-loop.
>
> * lisp/emacs-lisp/bytecomp.el: (byte-compile-lapcode) Use maphash
> instead of cl-loop
> commit 522f16dac945eee351cefb066af40f0d1a683f38
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 19 18:35:46 2017 +0530
>
> Add type checking for Bswitch, when enabled at compile time.
>
> * src/bytecode.c: (exec_byte_code) If BYTE_CODE_SAFE is enabled at
> compile time, use CHECK_TYPE to verify that the jump table is a hash table.
> commit de456d1e4a1d7e34be6d040e0d8a04c42b14e62e
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Fri Feb 3 23:23:28 2017 +0530
>
> Revert "Use maphash instead of cl-loop."
>
> This reverts commit bfa88520136dd6b187ba101e6db5a5f8f0d5e874.
> commit 1fcbd352f8116aca1ecdb62e84f3d86b89bc446f
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Thu Jan 19 18:02:40 2017 +0530
>
> Use byte-switch for all symbols.
>
> * lisp/emacs-lisp/bytecomp.el: (byte-compile-cond-valid-obj2-p) Return
> t for all symbols (instead for just keywords)
> commit 44c95c58b26b7b9d75965a83930ec3d77ffae28f
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 15:37:43 2017 +0530
>
> bytecomp.el: Don't store non-keyword symbols in jump-tables.
>
> * lisp/emacs-lisp/bytecomp.el (byte-compile-cond-valid-obj2-p) return
> nil when OBJ is a non-keyword symbol (i.e a variable), as the jump
> table can only be used when comparing variables with constant values.
> commit 086c4eaf9d4ecc5074088115fa01c0b2fb061246
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Wed Jan 18 22:40:50 2017 +0530
>
> * src/bytecode.c: (exec_byte_code) Use hash_lookup for Bswitch
>
> Fgethash type checks the provided table object, which is unnecessary
> for compiled bytecode.
> commit 84eef501554324b22c7a838aabed77aa79315121
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 18:49:24 2017 +0530
>
> byte-opt.el: Replace jump tables while decompiling correctly.
>
> * lisp/emacs-lisp/byte-opt.el (byte-decompile-bytecode-1):
> Don't make a copy of the constant vector, as it isn't used with
> the decompiled lapcode.
> Make sure that the correct lapcode pair/list is being modified while
> replacing the jump table.
> commit 37956463d67795819fe7d8fe02d6249388364783
> Merge: 309b46420e fd6b829d91
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Mon Jan 16 19:49:24 2017 +0530
>
> update branch
> commit fea1ad36a0f7b1538984ab0f077095a53c570aa4
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 18:55:45 2017 +0530
>
> ; * byte-opt.el (byte-decompile-bytecode-1): Add more documentation.
> commit 309b46420e83826ed1e0b947f98a47e8525e3c36
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Jan 15 21:38:31 2017 +0530
>
> * lisp/emacs-lisp/byte-opt.el: Optimize how tags are checked for use.
>
> * byte-opt.el: (byte-optimize-lapcode): Return nil instantly on
> finding the tag in a jump table.
> commit cadb044fc2e69266308cdcabe6181be0f624b484
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 19:23:53 2017 +0530
>
> bytecomp.el: Inline lapcode containing `byte-switch' correctly.
>
> * lisp/emacs-lisp/bytecomp.el (byte-compile-inline-lapcode):
> Restore value of byte-compile-depth after emitting a jump to a tag
> in a jump table, or default/done tags.
> Set the depth of final tags for byte-switch to nil after emitting
> any jumps to them.
> commit 490fc5a5029c0d8e527a0c7f423ba83fd6afda60
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 21:48:27 2017 +0530
>
> ; bytecomp.el (-inline-lapcode): Fix incorrect parenthesis, refactor
> commit 8c0f326ea237e8acd03c51c1b3a44d237c044562
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Jan 15 19:36:26 2017 +0530
>
> * lisp/emacs-lisp/bytecomp.el: Add documentation, remove code duplication
> commit 382f6603ad4ba2a69b3961bdc68580ce77d222f9
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 21:51:05 2017 +0530
>
> ; Fix typo.
>
> * lisp/emacs-lisp/bytecomp.el (byte-compile-cond-jump-table-info): Fix
> typo in docstring.
> commit 88549ec38e9bb30e338a9985d0de4e6263b40fb7
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Jan 15 01:26:04 2017 +0530
>
> Add new 'switch' byte-code.
>
> 'switch' takes two arguments from the stack: the variable to test, and
> a jump table (implemented as a hash-table with the appropriate :test
> function). By looking up the value of the variable in the hash table,
> the interpreter can jump to the label pointed to by the value, if any.
> This implementation can only be used for `cond' forms of the type
> `(cond ((test x 'foo) 'bar) ...)`, such that the function `test` and
> variable `x` is same for all clauses.
>
> * lisp/emacs-lisp/bytecomp.el:
>
> * Add (byte-compile-cond-valid-obj2-p), (byte-compile-cond-vars),
> (byte-compile-cond-jump-table-info), (byte-compile-jump-table-add-tag),
> (byte-compile-cond-jump-table), byte-compile-jump-tables.
>
> * Add defcustom `byte-compile-cond-use-jump-table'.
>
> * (byte-compile-cond): Use them.
>
> * (byte-compile-lapcode): Patch tags present in jump tables, if any.
>
> * lisp/emacs-lisp//byte-opt.el: (byte-optimize-lapcode): Add checks to
> some peephole optimizations to prevent them from messing up any code
> involving `byte-switch`.
>
> * src/bytecode.c: (exec_byte_code): Add bytecode Bswitch.
> commit 74a3423b0b92b80d84f6de62d1f2d61c21e4bd90
> Author: Vibhav Pant <vibhavp@gmail.com>
> Date: Sun Feb 5 22:10:22 2017 +0530
>
> * byte-opt.el (byte-decompile-bytecode-1): Use eq instead of =.
>
> ----
> -ap
--
Vibhav Pant
vibhavp@gmail.com
next prev parent reply other threads:[~2017-03-14 18:18 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-10 10:01 bug#26047: 26.0.50; emacs crash by cl-caff2 Leo Liu
2017-03-10 20:56 ` Andreas Politz
2017-03-14 18:07 ` Andreas Politz
2017-03-14 18:18 ` Vibhav Pant [this message]
2017-03-14 18:42 ` Andreas Politz
2017-03-16 19:45 ` Vibhav Pant
2017-03-17 10:17 ` Andreas Politz
2017-03-17 11:39 ` Vibhav Pant
2017-03-17 15:44 ` Andreas Politz
2017-05-18 3:19 ` npostavs
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CA+T2Sh3W5ThTJQ=KHdkSXXV5CLKFH=6vgs6yz2Z8=G-TvD6y9A@mail.gmail.com' \
--to=vibhavp@gmail.com \
--cc=26047@debbugs.gnu.org \
--cc=politza@hochschule-trier.de \
--cc=sdl.web@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.