• Mattias Engdegård's avatar
    Correctly eliminate duplicate cases in switch compilation · 68b374a6
    Mattias Engdegård authored
    Fix code mistakes that prevented the correct elimination of duplicated
    cases when compiling a `cond' form to a switch bytecode, as in
    
      (cond ((eq x 'a) 1)
            ((eq x 'b) 2)
            ((eq x 'a) 3)   ; should be elided
            ((eq x 'c) 4))
    
    Sometimes, this caused the bytecode to use the wrong branch (bug#35770).
    
    * lisp/emacs-lisp/bytecomp.el (byte-compile-cond-vars): Return obj2 eval'ed.
    (byte-compile-cond-jump-table-info):
    Discard redundant condition.  Use `obj2' as evaluated.
    Discard duplicated cases instead of failing the table generation.
    * test/lisp/emacs-lisp/bytecomp-tests.el (toplevel): Require subr-x.
    (byte-opt-testsuite-arith-data, bytecomp-test--switch-duplicates): Test.
    68b374a6
bytecomp-tests.el 25.5 KB