When doing profiledbootstrap the compiler fails with -Wuninitialized
false positive in stageprofile-bubble
This is a false positive as the analyzer seems unable to see that if
is_a <.., &foo> passes that foo will be initialized.
There didn't seem to be a good "initial" value here that wouldn't be
confusing so instead I rewrote the check to avoid the out parameter.
Bootstrapped Regtested on aarch64-none-linux-gnu,
arm-none-linux-gnueabihf, x86_64-pc-linux-gnu
-m32, -m64
with:
- default bootstrap
- profiledbootstrap
and no issues.
Ok for master?
Thanks,
Tamar
gcc/ChangeLog:
PR bootstrap/127635
* simplify-rtx.cc (simplify_context::simplify_subreg): Avoid is_a<..>
with ref param.
---
diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
index
285826a3fedac7dc95efb27f37b9ef7a7a1ef7e2..7c068814ae7cfa9477bcb370007b05d9649de8a5
100644
--- a/gcc/simplify-rtx.cc
+++ b/gcc/simplify-rtx.cc
@@ -8959,10 +8959,15 @@ simplify_context::simplify_subreg (machine_mode
outermode, rtx op,
break;
}
- if (is_a <scalar_int_mode> (outermode, &int_outermode)
- && is_a <scalar_int_mode> (innermode, &int_innermode)
- && known_eq (byte, subreg_lowpart_offset (int_outermode, int_innermode)))
+ if (SCALAR_INT_MODE_P (outermode)
+ && SCALAR_INT_MODE_P (innermode)
+ && known_eq (byte,
+ subreg_lowpart_offset (as_a <scalar_int_mode> (outermode),
+ as_a <scalar_int_mode> (innermode))))
{
+ scalar_int_mode int_outermode = as_a <scalar_int_mode> (outermode);
+ scalar_int_mode int_innermode = as_a <scalar_int_mode> (innermode);
+
/* Handle polynomial integers. The upper bits of a paradoxical
subreg are undefined, so this is safe regardless of whether
we're truncating or extending. */
--
diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
index 285826a3fedac7dc95efb27f37b9ef7a7a1ef7e2..7c068814ae7cfa9477bcb370007b05d9649de8a5 100644
--- a/gcc/simplify-rtx.cc
+++ b/gcc/simplify-rtx.cc
@@ -8959,10 +8959,15 @@ simplify_context::simplify_subreg (machine_mode outermode, rtx op,
break;
}
- if (is_a <scalar_int_mode> (outermode, &int_outermode)
- && is_a <scalar_int_mode> (innermode, &int_innermode)
- && known_eq (byte, subreg_lowpart_offset (int_outermode, int_innermode)))
+ if (SCALAR_INT_MODE_P (outermode)
+ && SCALAR_INT_MODE_P (innermode)
+ && known_eq (byte,
+ subreg_lowpart_offset (as_a <scalar_int_mode> (outermode),
+ as_a <scalar_int_mode> (innermode))))
{
+ scalar_int_mode int_outermode = as_a <scalar_int_mode> (outermode);
+ scalar_int_mode int_innermode = as_a <scalar_int_mode> (innermode);
+
/* Handle polynomial integers. The upper bits of a paradoxical
subreg are undefined, so this is safe regardless of whether
we're truncating or extending. */