diff options
author | Jakub Jelinek <jakub@redhat.com> | 2024-07-17 11:40:03 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2024-07-17 11:40:03 +0200 |
commit | 74bcef4cf16b35fe64767c1e8e529bdd229841a3 (patch) | |
tree | 763ea2d0742a0d4bcb8159e6bcccecd348fc6289 | |
parent | 8b5919bae11754f4b65a17e63663d3143f9615ac (diff) | |
download | gcc-74bcef4cf16b35fe64767c1e8e529bdd229841a3.zip gcc-74bcef4cf16b35fe64767c1e8e529bdd229841a3.tar.gz gcc-74bcef4cf16b35fe64767c1e8e529bdd229841a3.tar.bz2 |
varasm: Fix bootstrap after the .base64 changes [PR115958]
Apparently there is a -Wsign-compare warning if ptrdiff_t has precision of
int, then (t - s + 1 + 2) / 3 * 4 has int type while cnt unsigned int.
This doesn't warn if ptrdiff_t has larger precision, say on x86_64
it is 64-bit and so (t - s + 1 + 2) / 3 * 4 has long type and cnt unsigned
int. And it doesn't warn when using older binutils (in my tests I've
used new binutils on x86_64 and old binutils on i686).
Anyway, earlier condition guarantees that t - s is at most 256-ish and
t >= s by construction, so we can just cast it to (unsigned) to avoid
the warning.
2024-07-17 Jakub Jelinek <jakub@redhat.com>
PR other/115958
* varasm.cc (default_elf_asm_output_ascii): Cast t - s to unsigned
to avoid -Wsign-compare warnings.
-rw-r--r-- | gcc/varasm.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/varasm.cc b/gcc/varasm.cc index fe0a6b8..ecd91a6 100644 --- a/gcc/varasm.cc +++ b/gcc/varasm.cc @@ -8543,7 +8543,7 @@ default_elf_asm_output_ascii (FILE *f, const char *s, unsigned int len) { if (t == p && t != s) { - if (cnt <= (t - s + 1 + 2) / 3 * 4 + if (cnt <= ((unsigned) (t - s) + 1 + 2) / 3 * 4 && (!prev_base64 || (t - s) >= 16) && ((t - s) > 1 || cnt <= 2)) { @@ -8569,7 +8569,7 @@ default_elf_asm_output_ascii (FILE *f, const char *s, unsigned int len) break; } } - if (cnt > (t - s + 2) / 3 * 4 && (t - s) >= 3) + if (cnt > ((unsigned) (t - s) + 2) / 3 * 4 && (t - s) >= 3) { if (bytes_in_chunk > 0) { |