|
124 | 124 |
|
125 | 125 | #if GTEST_INTERNAL_HAS_STD_SPAN |
126 | 126 | #include <span> // NOLINT |
127 | | -#endif // GTEST_INTERNAL_HAS_STD_SPAN |
| 127 | +#endif // GTEST_INTERNAL_HAS_STD_SPAN |
128 | 128 |
|
129 | 129 | namespace testing { |
130 | 130 |
|
@@ -241,8 +241,8 @@ struct StreamPrinter { |
241 | 241 | // ADL (possibly involving implicit conversions). |
242 | 242 | // (Use SFINAE via return type, because it seems GCC < 12 doesn't handle name |
243 | 243 | // lookup properly when we do it in the template parameter list.) |
244 | | - static auto PrintValue(const T& value, ::std::ostream* os) |
245 | | - -> decltype((void)(*os << value)) { |
| 244 | + static auto PrintValue(const T& value, |
| 245 | + ::std::ostream* os) -> decltype((void)(*os << value)) { |
246 | 246 | // Call streaming operator found by ADL, possibly with implicit conversions |
247 | 247 | // of the arguments. |
248 | 248 | *os << value; |
@@ -558,43 +558,50 @@ int AppropriateResolution(FloatType val) { |
558 | 558 | #endif |
559 | 559 | if (val < 1000000) { |
560 | 560 | FloatType mulfor6 = 1e10; |
561 | | - if (val >= 100000.0) { // 100,000 to 999,999 |
| 561 | + // Without these static casts, the template instantiation for float would |
| 562 | + // fail to compile when -Wdouble-promotion is enabled, as the arithmetic and |
| 563 | + // comparison logic would promote floats to doubles. |
| 564 | + if (val >= static_cast<FloatType>(100000.0)) { // 100,000 to 999,999 |
562 | 565 | mulfor6 = 1.0; |
563 | | - } else if (val >= 10000.0) { |
| 566 | + } else if (val >= static_cast<FloatType>(10000.0)) { |
564 | 567 | mulfor6 = 1e1; |
565 | | - } else if (val >= 1000.0) { |
| 568 | + } else if (val >= static_cast<FloatType>(1000.0)) { |
566 | 569 | mulfor6 = 1e2; |
567 | | - } else if (val >= 100.0) { |
| 570 | + } else if (val >= static_cast<FloatType>(100.0)) { |
568 | 571 | mulfor6 = 1e3; |
569 | | - } else if (val >= 10.0) { |
| 572 | + } else if (val >= static_cast<FloatType>(10.0)) { |
570 | 573 | mulfor6 = 1e4; |
571 | | - } else if (val >= 1.0) { |
| 574 | + } else if (val >= static_cast<FloatType>(1.0)) { |
572 | 575 | mulfor6 = 1e5; |
573 | | - } else if (val >= 0.1) { |
| 576 | + } else if (val >= static_cast<FloatType>(0.1)) { |
574 | 577 | mulfor6 = 1e6; |
575 | | - } else if (val >= 0.01) { |
| 578 | + } else if (val >= static_cast<FloatType>(0.01)) { |
576 | 579 | mulfor6 = 1e7; |
577 | | - } else if (val >= 0.001) { |
| 580 | + } else if (val >= static_cast<FloatType>(0.001)) { |
578 | 581 | mulfor6 = 1e8; |
579 | | - } else if (val >= 0.0001) { |
| 582 | + } else if (val >= static_cast<FloatType>(0.0001)) { |
580 | 583 | mulfor6 = 1e9; |
581 | 584 | } |
582 | | - if (static_cast<FloatType>(static_cast<int32_t>(val * mulfor6 + 0.5)) / |
| 585 | + if (static_cast<FloatType>(static_cast<int32_t>( |
| 586 | + val * mulfor6 + (static_cast<FloatType>(0.5)))) / |
583 | 587 | mulfor6 == |
584 | 588 | val) |
585 | 589 | return 6; |
586 | | - } else if (val < 1e10) { |
587 | | - FloatType divfor6 = 1.0; |
588 | | - if (val >= 1e9) { // 1,000,000,000 to 9,999,999,999 |
| 590 | + } else if (val < static_cast<FloatType>(1e10)) { |
| 591 | + FloatType divfor6 = static_cast<FloatType>(1.0); |
| 592 | + if (val >= static_cast<FloatType>(1e9)) { // 1,000,000,000 to 9,999,999,999 |
589 | 593 | divfor6 = 10000; |
590 | | - } else if (val >= 1e8) { // 100,000,000 to 999,999,999 |
| 594 | + } else if (val >= |
| 595 | + static_cast<FloatType>(1e8)) { // 100,000,000 to 999,999,999 |
591 | 596 | divfor6 = 1000; |
592 | | - } else if (val >= 1e7) { // 10,000,000 to 99,999,999 |
| 597 | + } else if (val >= |
| 598 | + static_cast<FloatType>(1e7)) { // 10,000,000 to 99,999,999 |
593 | 599 | divfor6 = 100; |
594 | | - } else if (val >= 1e6) { // 1,000,000 to 9,999,999 |
| 600 | + } else if (val >= static_cast<FloatType>(1e6)) { // 1,000,000 to 9,999,999 |
595 | 601 | divfor6 = 10; |
596 | 602 | } |
597 | | - if (static_cast<FloatType>(static_cast<int32_t>(val / divfor6 + 0.5)) * |
| 603 | + if (static_cast<FloatType>(static_cast<int32_t>( |
| 604 | + val / divfor6 + (static_cast<FloatType>(0.5)))) * |
598 | 605 | divfor6 == |
599 | 606 | val) |
600 | 607 | return 6; |
|
0 commit comments