On 13/2/23 17:13, Pierrick Bouvier wrote:
When compiling for windows-arm64 using clang-15, it reports a sometimes
uninitialized variable. This seems to be a false positive, as a default
case guards switch expressions, preventing to return an uninitialized
value, but clang seems unhappy with assert definition.

Setting the rnd variable to zero does not hurt anyway.

../target/ppc/dfp_helper.c:141:13: error: variable 'rnd' is used uninitialized 
whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]             
                                                                 assert(0); /* 
cannot get here */                                                              
                                                                                
                                      ^~~~~~~~~
../include/qemu/osdep.h:229:20: note: expanded from macro 'assert'              
                                                                                
                                          #define assert(x)  g_assert(x)        
                                                                                
                                                                                
                                 ^~~~~~~~~~~
/clangarm64/bin/../include/glib-2.0/glib/gtestutils.h:235:49: note: expanded 
from macro 'g_assert'                                                           
                                                                    if G_LIKELY 
(expr) ; else \
                                                 ^~~~~~~~~~~~~~~
/clangarm64/bin/../include/glib-2.0/glib/gmacros.h:1186:25: note: expanded from 
macro 'G_LIKELY'
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../target/ppc/dfp_helper.c:144:42: note: uninitialized use occurs here
     decContextSetRounding(&dfp->context, rnd);

Signed-off-by: Pierrick Bouvier <pierrick.bouv...@linaro.org>
---
  target/ppc/dfp_helper.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target/ppc/dfp_helper.c b/target/ppc/dfp_helper.c
index cc024316d5..0b4b280683 100644
--- a/target/ppc/dfp_helper.c
+++ b/target/ppc/dfp_helper.c
@@ -69,7 +69,7 @@ struct PPC_DFP {
static void dfp_prepare_rounding_mode(decContext *context, uint64_t fpscr)
  {
-    enum rounding rnd;
+    enum rounding rnd = 0;
switch ((fpscr & FP_DRN) >> FPSCR_DRN0) {
      case 0:
@@ -106,7 +106,7 @@ static void dfp_prepare_rounding_mode(decContext *context, 
uint64_t fpscr)
  static void dfp_set_round_mode_from_immediate(uint8_t r, uint8_t rmc,
                                                    struct PPC_DFP *dfp)
  {
-    enum rounding rnd;
+    enum rounding rnd = 0;

Could DEC_ROUND_DEFAULT be clearer?


Reply via email to