Sparse errors
Takashi Iwai
tiwai at suse.de
Wed May 26 09:40:41 CEST 2021
On Tue, 25 May 2021 21:32:27 +0200,
Pierre-Louis Bossart wrote:
>
> Hi Takashi,
> Sparse reports a lot of new issues in our last checks with more options:
>
> export ARCH=x86_64 CF="-Wsparse-error -Wsparse-all
> -Wno-bitwise-pointer -Wno-pointer-arith -Wno-typesign -Wnoshadow
> -Wno-sizeof-bool"
> make -k sound/ C=2
>
> most are linked to the __user and pcm_format_t restricted types, but I
> found the simpler ones below which are useless comparisons. I can send
> a patch for the last but not sure how to address the first two.
>
> Thanks for your feedback
> -Pierre
>
> sound/core/info.c:95:38: error: self-comparison always evaluates to false
>
> if (pos < 0 || (long) pos != pos || (ssize_t) count < 0)
> return false;
>
> not sure what the second comparison is meant to check?
As Dan suggested, it's a check only for 32bit architecture for a 64bit
value.
> sound/drivers/opl3/opl3_midi.c:183:60: error: self-comparison always
> evaluates to false
>
> This indeed makes no sense. the voice_time and vp->time are not
> changed in the loop, the test is either redundant or something else is
> missing.
The code doesn't look right, indeed. It's likely meant to be vp2
instead of vp.
--- a/sound/drivers/opl3/opl3_midi.c
+++ b/sound/drivers/opl3/opl3_midi.c
@@ -180,8 +180,7 @@ static int opl3_get_voice(struct snd_opl3 *opl3, int instr_4op,
if (vp2->state == SNDRV_OPL3_ST_ON_2OP) {
/* kill two voices, EXPENSIVE */
bp++;
- voice_time = (voice_time > vp->time) ?
- voice_time : vp->time;
+ voice_time = max(voice_time, vp2->time);
}
} else {
/* allocate 2op voice */
> sound/pci/lx6464es/lx_core.c:677:34: error: self-comparison always
> evaluates to false
>
> That seems like dead code indeed:
>
> u32 channels = runtime->channels;
>
> if (runtime->channels != channels)
> dev_err(chip->card->dev, "channel count mismatch: %d vs %d",
> runtime->channels, channels);
Yes, this can be deleted.
thanks,
Takashi
More information about the Alsa-devel
mailing list