Subject: bug#46812: 28.0.50; [native-comp] (lambda (x) (if (= x 0.0) (floatp x) (error ""))) miscompiled

From: Andrea Corallo <[email-masked]>
Date: Sun, 28 Feb 2021 23:03:37 +0000

Andrea Corallo via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <[email-masked]> writes:

> Pip Cet <[email-masked]> writes:
>
>> In *scratch*, evaluate
>>
>> (funcall (native-compile `(lambda (x) (if (= x 0.0) (floatp x) (error "")))) 0)
>
> Nice reproducer for a nice bug.
>
> This week-end I'm mostly off, will come back on this very quickly.
>

Here what was going on:

`=' was treated homogeneously with other equality operators and in the
'then' branch of:

(if (= x 0.0)
    then
  else)

we were assuming x being 0.0.

Indeed that's not correct as `=' has a more complex semantic allowing
mixed integer float comparisons; ex (= 0 0.0) is satisfied.

5bc08559e8 allow now fwprop to propagate `=' semantic hopefully
correctly, the patch adds also a bunch of tests to check for this.

Closing as the reproducer is passing here.

Thanks for reporting

  Andrea