Skip to content

Cleanup/Maintenance: Build warnings with Clang

Building the code with Clang v16 reveals some warnings that we do not see with gcc in our pipelines - most likely due to different defaults. Relevant ones are probably:

Wtautological-constant-out-of-range-compare

This particular one might actually be a bug? @venkateshsa

lib_enc/ivas_ism_param_enc.c:163:103: warning: result of comparison of constant 32768 with expression of type 'Word16' (aka 'short') is always true [-Wtautological-constant-out-of-range-compare]
  163 |             assert( ( power_ratios_m[b][m] >= ONE_IN_Q14 /* 0.5 in Q15 */ ) && ( power_ratios_m[b][m] <= ONE_IN_Q15 /* 1 in Q15 */ ) );
      |                                                                                  ~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~

Wself-assign:

lib_enc/SNR_calc_fx.c:403:23: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
  403 |             snr_delta = snr_delta;
      |             ~~~~~~~~~ ^ ~~~~~~~~~
lib_enc/SNR_calc_fx.c:450:23: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
  450 |             snr_delta = snr_delta;
      |             ~~~~~~~~~ ^ ~~~~~~~~~
lib_enc/SNR_calc_fx.c:497:23: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
  497 |             snr_delta = snr_delta;
      |             ~~~~~~~~~ ^ ~~~~~~~~~
lib_enc/ivas_stereo_dft_td_itd.c:233:7: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
  233 |     g = g;
      |     ~ ^ ~
lib_enc/ivas_stereo_dft_td_itd.c:237:9: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
  237 |     nsr = nsr;
      |     ~~~ ^ ~~~
lib_enc/ivas_stereo_icbwe_enc.c:513:25: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
  513 |             slopeILD_fx = slopeILD_fx;
      |             ~~~~~~~~~~~ ^ ~~~~~~~~~~~
lib_enc/ivas_mc_paramupmix_enc.c:996:23: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
  996 |                 tmp_4 = tmp_4;
      |                 ~~~~~ ^ ~~~~~
lib_enc/ivas_mc_paramupmix_enc.c:997:26: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
  997 |                 exp_tmp4 = exp_tmp4;
      |                 ~~~~~~~~ ^ ~~~~~~~~
lib_com/swb_bwe_com_lr_fx.c:211:13: warning: variable 'p_diff_peak_pos' set but not used [-Wunused-but-set-variable]
  211 |     Word16 *p_diff_peak_pos, *pm1_diff_peak_pos;
      |             ^
lib_com/lsf_tools_fx.c:3329:15: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
 3329 |             n = n;
      |             ~ ^ ~
lib_dec/ivas_masa_dec.c:2330:18: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
 2330 |             E_fx = E_fx;
      |             ~~~~ ^ ~~~~
lib_rend/ivas_mcmasa_ana.c:904:28: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
  904 |                 surrCoh_fx = surrCoh_fx;
      |                 ~~~~~~~~~~ ^ ~~~~~~~~~~
lib_rend/ivas_mcmasa_ana.c:1094:34: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
 1094 |                     spreadCoh_fx = spreadCoh_fx;
      |                     ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
lib_rend/ivas_mcmasa_ana.c:1103:34: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
 1103 |                     spreadCoh_fx = spreadCoh_fx;
      |                     ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
lib_rend/ivas_mcmasa_ana.c:1145:33: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
 1145 |                     cohRatio_fx = cohRatio_fx;
      |                     ~~~~~~~~~~~ ^ ~~~~~~~~~~~
lib_rend/ivas_mcmasa_ana.c:1156:33: warning: explicitly assigning value of variable of type 'Word32' (aka 'int') to itself [-Wself-assign]
 1156 |                     cohRatio_fx = cohRatio_fx;
      |                     ~~~~~~~~~~~ ^ ~~~~~~~~~~~
lib_dec/avq_dec_fx.c:276:20: warning: explicitly assigning value of variable of type 'Word16' (aka 'short') to itself [-Wself-assign]
  276 |             nq_est = nq_est;
      |             ~~~~~~ ^ ~~~~~~

lib_enc/swb_tbe_enc_fx.c:687:18: warning: variable 'k' set but not used [-Wunused-but-set-variable]
  687 |     Word16 i, j, k;
      |                  ^
lib_enc/swb_bwe_enc_lr_fx.c:357:19: warning: variable 'ptr_predBuf_ni' set but not used [-Wunused-but-set-variable]
  357 |     const Word16 *ptr_predBuf_ni;
      |                   ^
lib_dec/dec_uv_fx.c:47:19: warning: variable 'p_Aq_fx' set but not used [-Wunused-but-set-variable]
   47 |     const Word16 *p_Aq_fx;
      |                   ^

Wunused-but-set-variable

lib_enc/swb_tbe_enc_fx.c:687:18: warning: variable 'k' set but not used [-Wunused-but-set-variable]
  687 |     Word16 i, j, k;
      |                  ^
lib_enc/swb_bwe_enc_lr_fx.c:357:19: warning: variable 'ptr_predBuf_ni' set but not used [-Wunused-but-set-variable]
  357 |     const Word16 *ptr_predBuf_ni;
      |                   ^
lib_dec/dec_uv_fx.c:47:19: warning: variable 'p_Aq_fx' set but not used [-Wunused-but-set-variable]
   47 |     const Word16 *p_Aq_fx;
      |                   ^

Then, there are some which are probably less relevant, will just list them below. Imho, the above ones should be fixed and added to the build tests (by adding build test for clang, especially the Wself-assign warnings does not seem to be there in gcc v9).


Rest of warnings:

lib_enc/ivas_mct_core_enc.c:245:55: warning: suggest braces around initialization of subobject [-Wmissing-braces]
  245 |     Word32 *mdst_spectrum_fx[MCT_MAX_CHANNELS][2] = { NULL };
      |                                                       ^~~~
      |                                                       {   }
lib_enc/cod_tcx_fx.c:4239:30: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
 4239 |         if ( ( st->last_core == ACELP_CORE ) )
      |                ~~~~~~~~~~~~~~^~~~~~~~~~~~~
lib_enc/cod_tcx_fx.c:4239:30: note: remove extraneous parentheses around the comparison to silence this warning
 4239 |         if ( ( st->last_core == ACELP_CORE ) )
      |              ~               ^             ~
lib_enc/cod_tcx_fx.c:4239:30: note: use '=' to turn this equality comparison into an assignment
 4239 |         if ( ( st->last_core == ACELP_CORE ) )
      |                              ^~
      |                              =
lib_com/count.c:440:33: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
  440 | void ClearNbTimeObjectsAreCalled()
      |                                 ^
      |                                  void
lib_com/count.c:452:30: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
  452 | Word32 TotalWeightedOperation()
      |                              ^
      |                               void
lib_com/count.c:475:30: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
  475 | Word32 DeltaWeightedOperation()
      |                              ^
      |                               void
1 warning generated.
lib_dec/core_dec_init_fx.c:1290:30: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
 1290 |         if ( ( st->ini_frame == 0 ) )
      |                ~~~~~~~~~~~~~~^~~~
lib_dec/core_dec_init_fx.c:1290:30: note: remove extraneous parentheses around the comparison to silence this warning
 1290 |         if ( ( st->ini_fr    Compiling lib_dec/rst_dec_fx.c
lib_dec/dec_LPD_fx.c:451:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
  451 |         if ( ( st->core == ACELP_CORE ) )
      |                ~~~~~~~~~^~~~~~~~~~~~~
lib_dec/dec_LPD_fx.c:451:25: note: remove extraneous parentheses around the comparison to silence this warning
  451 |         if ( ( st->core == ACELP_CORE ) )
      |              ~          ^             ~
lib_dec/dec_LPD_fx.c:451:25: note: use '=' to turn this equality comparison into an assignment
  451 |         if ( ( st->core == ACELP_CORE ) )
      |                         ^~
      |                         =
lib_dec/core_dec_init_fx.c:1290:30: note: use '=' to turn this equality comparison into an assignment
 1290 |         if ( ( st->ini_frame == 0 ) )
      |                              ^~
      |                              =
lib_dec/core_dec_init_fx.c:1363:26: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
 1363 |     if ( ( st->ini_frame == 0 ) )
      |            ~~~~~~~~~~~~~~^~~~
lib_dec/core_dec_init_fx.c:1363:26: note: remove extraneous parentheses around the comparison to silence this warning
 1363 |     if ( ( st->ini_frame == 0 ) )
      |          ~               ^    ~
lib_dec/core_dec_init_fx.c:1363:26: note: use '=' to turn this equality comparison into an assignment
 1363 |     if ( ( st->ini_frame == 0 ) )
      |                          ^~
      |                          =
lib_dec/avq_dec_fx.c:187:39: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
  187 |                 if ( ( nq[svOrder[j]] == 0 ) )
      |                        ~~~~~~~~~~~~~~~^~~~
lib_dec/avq_dec_fx.c:187:39: note: remove extraneous parentheses around the comparison to silence this warning
  187 |                 if ( ( nq[svOrder[j]] == 0 ) )
      |                      ~                ^    ~
lib_dec/avq_dec_fx.c:187:39: note: use '=' to turn this equality comparison into an assignment
  187 |                 if ( ( nq[svOrder[j]] == 0 ) )
      |                                       ^~