diff options
author | Michael Jones <michaelrj@google.com> | 2024-06-18 11:17:22 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-18 11:17:22 -0700 |
commit | 7b33c5c79c20745aed953ea5539f32de1a622752 (patch) | |
tree | 7855cfbd60f651cf889601ad220c4043200ae51d | |
parent | 295d5746dfc1ff5ae7d5767c6ada6130a2a69533 (diff) | |
download | llvm-7b33c5c79c20745aed953ea5539f32de1a622752.zip llvm-7b33c5c79c20745aed953ea5539f32de1a622752.tar.gz llvm-7b33c5c79c20745aed953ea5539f32de1a622752.tar.bz2 |
[libc] Remove unnecessary check in printf floats (#95841)
Fixes https://github.com/llvm/llvm-project/issues/95638
The check was `if(unsigned_num >= 0)` which will always be true. The
intent was to check for zero, but the `for` loop inside the `if` was
already doing that.
-rw-r--r-- | libc/src/stdio/printf_core/float_dec_converter.h | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/libc/src/stdio/printf_core/float_dec_converter.h b/libc/src/stdio/printf_core/float_dec_converter.h index 666e4c9..1237db6 100644 --- a/libc/src/stdio/printf_core/float_dec_converter.h +++ b/libc/src/stdio/printf_core/float_dec_converter.h @@ -502,25 +502,22 @@ LIBC_INLINE int convert_float_decimal_typed(Writer *writer, const size_t positive_blocks = float_converter.get_positive_blocks(); - if (positive_blocks >= 0) { - // This loop iterates through the number a block at a time until it finds a - // block that is not zero or it hits the decimal point. This is because all - // zero blocks before the first nonzero digit or the decimal point are - // ignored (no leading zeroes, at least at this stage). - int32_t i = static_cast<int32_t>(positive_blocks) - 1; - for (; i >= 0; --i) { - BlockInt digits = float_converter.get_positive_block(i); - if (nonzero) { - RET_IF_RESULT_NEGATIVE(float_writer.write_middle_block(digits)); - } else if (digits != 0) { - size_t blocks_before_decimal = i; - float_writer.init((blocks_before_decimal * BLOCK_SIZE) + - (has_decimal_point ? 1 : 0) + precision, - blocks_before_decimal * BLOCK_SIZE); - float_writer.write_first_block(digits); - - nonzero = true; - } + // This loop iterates through the number a block at a time until it finds a + // block that is not zero or it hits the decimal point. This is because all + // zero blocks before the first nonzero digit or the decimal point are + // ignored (no leading zeroes, at least at this stage). + for (int32_t i = static_cast<int32_t>(positive_blocks) - 1; i >= 0; --i) { + BlockInt digits = float_converter.get_positive_block(i); + if (nonzero) { + RET_IF_RESULT_NEGATIVE(float_writer.write_middle_block(digits)); + } else if (digits != 0) { + size_t blocks_before_decimal = i; + float_writer.init((blocks_before_decimal * BLOCK_SIZE) + + (has_decimal_point ? 1 : 0) + precision, + blocks_before_decimal * BLOCK_SIZE); + float_writer.write_first_block(digits); + + nonzero = true; } } |