aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Jones <michaelrj@google.com>2024-06-18 11:17:22 -0700
committerGitHub <noreply@github.com>2024-06-18 11:17:22 -0700
commit7b33c5c79c20745aed953ea5539f32de1a622752 (patch)
tree7855cfbd60f651cf889601ad220c4043200ae51d
parent295d5746dfc1ff5ae7d5767c6ada6130a2a69533 (diff)
downloadllvm-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.h35
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;
}
}