c-family: Fix up shorten_compare for decimal vs. non-decimal float comparison [PR104510]
authorJakub Jelinek <jakub@redhat.com>
Wed, 16 Feb 2022 08:25:55 +0000 (09:25 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 16 Feb 2022 08:25:55 +0000 (09:25 +0100)
commit6e74122f0de6748b3fd0ed9183090cd7c61fb53e
treec8f92acf34bcbdc234a074047a01e330dd1fbdb2
parent875e493bf5eb04c11bc3846a6bfee47a6f183e3f
c-family: Fix up shorten_compare for decimal vs. non-decimal float comparison [PR104510]

The comment in shorten_compare says:
  /* If either arg is decimal float and the other is float, fail.  */
but the callers of shorten_compare don't expect anything like failure
as a possibility from the function, callers require that the function
promotes the operands to the same type, whether the original selected
*restype_ptr one or some shortened.
So, if we choose not to shorten, we should still promote to the original
*restype_ptr.

2022-02-16  Jakub Jelinek  <jakub@redhat.com>

PR c/104510
* c-common.cc (shorten_compare): Convert original arguments to
the original *restype_ptr when mixing binary and decimal float.

* gcc.dg/dfp/pr104510.c: New test.
gcc/c-family/c-common.cc
gcc/testsuite/gcc.dg/dfp/pr104510.c [new file with mode: 0644]