https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78249

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-11-08
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
#include <limits>

double x = 0.0 * std::numeric_limits<double>::infinity();

get's me

x:
        .long   0
        .long   2146959360

independent of optimization level.  But I can confirm the findings for

#include <iostream>
#include <limits>
double y = 0.0 * std::numeric_limits<double>::infinity();
int main() {
        double x = 0.0 * std::numeric_limits<double>::infinity();
        std::cout << "CPP runtime: " << x << std::endl;
        std::cout << "CPP compile-time: " << y << std::endl;
}

which evaluates 0.0 * std::numeric_limits<double>::infinity() at runtime via

  4008fe:       e8 9f 00 00 00          callq  4009a2
<_ZNSt14numeric_limitsIdE8
infinityEv>
  400903:       66 0f 28 c8             movapd %xmm0,%xmm1
  400907:       66 0f ef c0             pxor   %xmm0,%xmm0
  40090b:       f2 0f 59 c1             mulsd  %xmm1,%xmm0

where with optimization we simplify it to +NaN (at compile-time).

Reply via email to