On Sun, 27 Jun 2021 07:12:03 +0200, Nathan Chancellor wrote:
Clang warns:
sound/usb/mixer_scarlett_gen2.c:1189:32: warning: expression result unused [-Wunused-value] for (i = 0; i < count; i++, (u16 *)buf++) ^ ~~~~~ 1 warning generated.
It appears the intention was to cast the void pointer to a u16 pointer so that the data could be iterated through like an array of u16 values. However, the cast happens after the increment because a cast is an rvalue, whereas the post-increment operator only works on lvalues, so the loop does not iterate as expected. This is not a bug in practice because count is not greater than one at the moment but this could change in the future so this should be fixed.
Replace the cast with a temporary variable of the proper type, which is less error prone and fixes the iteration. Do the same thing for the 'u8 *' below this if block.
Fixes: ac34df733d2d ("ALSA: usb-audio: scarlett2: Update get_config to do endian conversion") Link: https://github.com/ClangBuiltLinux/linux/issues/1408 Acked-by: Geoffrey D. Bennett g@b4.vu Signed-off-by: Nathan Chancellor nathan@kernel.org
v1 -> v2:
Use temporary variables of proper type rather than casting, as requested by Takashi.
Mention that there is not a bug at the moment per Geoffrey's comment.
v2 -> v3:
Restrict scope of buf_16 more, as requested by Geoffrey.
Add Geoffrey's ack.
v3 -> v4:
Fix stray newline added below
if (config_item->size >= 8) {
leftover from buf_16's declaration.
v4 -> v5 (or how many times does it take Nathan to get a patch right):
- Re-add note about no bug that was dropped in v3 by accident, as noticed by Geoffrey. My apologies for the multiple revisions.
Thanks, applied now.
Takashi