Procházet zdrojové kódy

Fix bug in real::real(int64_t) caused by undefined behaviour.

wip/core-clipp
Sam Hocevar před 6 roky
rodič
revize
f30c17f180
1 změnil soubory, kde provedl 4 přidání a 1 odebrání
  1. +4
    -1
      include/lol/math/real.ipp

+ 4
- 1
include/lol/math/real.ipp Zobrazit soubor

@@ -94,7 +94,10 @@ template<> inline real::Real(float f) { new(this) real((double)f); }


template<> inline real::Real(int64_t i) template<> inline real::Real(int64_t i)
{ {
new(this) real((uint64_t)std::abs(i));
// Use this instead of std::abs() because of undefined behaviour
// with INT64_MIN.
uint64_t abs_i = i < 0 ? -(uint64_t)i : (uint64_t)i;
new(this) real(abs_i);
m_sign = i < 0; m_sign = i < 0;
} }




Načítá se…
Zrušit
Uložit