apps: common: dng_writer: Add a default case for switch-case on a modulo
diff mbox series

Message ID 20240124075604.2635498-1-paul.elder@ideasonboard.com
State Accepted
Commit 64502c8d4a3c0f440bf265a5ad03be00653957ba
Headers show
Series
  • apps: common: dng_writer: Add a default case for switch-case on a modulo
Related show

Commit Message

Paul Elder Jan. 24, 2024, 7:56 a.m. UTC
Clearly all cases in the switch are already satisfied, but some
compilers fail to realize this and spit out an error:

Compiler version: gcc 11.2.0 "aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2021.11) 11.2.0"

../../src/apps/common/dng_writer.cpp: In function ‘void thumbScanlineIPU3(const FormatInfo&, void*, const void*, unsigned int, unsigned int)’:
../../src/apps/common/dng_writer.cpp:277:55: error: ‘val4’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
      |                                                       ^~~~
../../src/apps/common/dng_writer.cpp:277:48: error: ‘val3’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
      |                                                ^~~~
../../src/apps/common/dng_writer.cpp:277:41: error: ‘val2’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
      |                                         ^~~~
../../src/apps/common/dng_writer.cpp:277:34: error: ‘val1’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
      |                                  ^~~~

Add a default case for the switch-case on a modulo to silence this.

Bug: https://bugs.libcamera.org/show_bug.cgi?id=207
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
---
 src/apps/common/dng_writer.cpp | 1 +
 1 file changed, 1 insertion(+)

Comments

Kieran Bingham Jan. 24, 2024, 11:39 a.m. UTC | #1
Quoting Paul Elder (2024-01-24 07:56:04)
> Clearly all cases in the switch are already satisfied, but some
> compilers fail to realize this and spit out an error:
> 
> Compiler version: gcc 11.2.0 "aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2021.11) 11.2.0"
> 
> ../../src/apps/common/dng_writer.cpp: In function ‘void thumbScanlineIPU3(const FormatInfo&, void*, const void*, unsigned int, unsigned int)’:
> ../../src/apps/common/dng_writer.cpp:277:55: error: ‘val4’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
>       |                                                       ^~~~
> ../../src/apps/common/dng_writer.cpp:277:48: error: ‘val3’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
>       |                                                ^~~~
> ../../src/apps/common/dng_writer.cpp:277:41: error: ‘val2’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
>       |                                         ^~~~
> ../../src/apps/common/dng_writer.cpp:277:34: error: ‘val1’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
>       |                                  ^~~~
> 
> Add a default case for the switch-case on a modulo to silence this.
> 
> Bug: https://bugs.libcamera.org/show_bug.cgi?id=207
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/apps/common/dng_writer.cpp | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp
> index c945edce7..82bc065a5 100644
> --- a/src/apps/common/dng_writer.cpp
> +++ b/src/apps/common/dng_writer.cpp
> @@ -248,6 +248,7 @@ void thumbScanlineIPU3([[maybe_unused]] const FormatInfo &info, void *output,
>  
>                 uint16_t val1, val2, val3, val4;
>                 switch (pixelInBlock % 4) {
> +               default:
>                 case 0:
>                         val1 = (in[1] & 0x03) << 14 | (in[0] & 0xff) << 6;
>                         val2 = (in[2] & 0x0f) << 12 | (in[1] & 0xfc) << 4;
> -- 
> 2.39.2
>
Laurent Pinchart Jan. 24, 2024, 3:20 p.m. UTC | #2
On Wed, Jan 24, 2024 at 11:39:05AM +0000, Kieran Bingham wrote:
> Quoting Paul Elder (2024-01-24 07:56:04)
> > Clearly all cases in the switch are already satisfied, but some
> > compilers fail to realize this and spit out an error:
> > 
> > Compiler version: gcc 11.2.0 "aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2021.11) 11.2.0"
> > 
> > ../../src/apps/common/dng_writer.cpp: In function ‘void thumbScanlineIPU3(const FormatInfo&, void*, const void*, unsigned int, unsigned int)’:
> > ../../src/apps/common/dng_writer.cpp:277:55: error: ‘val4’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
> >   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
> >       |                                                       ^~~~
> > ../../src/apps/common/dng_writer.cpp:277:48: error: ‘val3’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
> >   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
> >       |                                                ^~~~
> > ../../src/apps/common/dng_writer.cpp:277:41: error: ‘val2’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
> >   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
> >       |                                         ^~~~
> > ../../src/apps/common/dng_writer.cpp:277:34: error: ‘val1’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
> >   277 |                 uint8_t value = (val1 + val2 + val3 + val4) >> 10;
> >       |                                  ^~~~
> > 
> > Add a default case for the switch-case on a modulo to silence this.
> > 
> > Bug: https://bugs.libcamera.org/show_bug.cgi?id=207
> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

I'm really curious to know what gcc is thinking, but that doesn't
prevent me from saying

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> > ---
> >  src/apps/common/dng_writer.cpp | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp
> > index c945edce7..82bc065a5 100644
> > --- a/src/apps/common/dng_writer.cpp
> > +++ b/src/apps/common/dng_writer.cpp
> > @@ -248,6 +248,7 @@ void thumbScanlineIPU3([[maybe_unused]] const FormatInfo &info, void *output,
> >  
> >                 uint16_t val1, val2, val3, val4;
> >                 switch (pixelInBlock % 4) {
> > +               default:
> >                 case 0:
> >                         val1 = (in[1] & 0x03) << 14 | (in[0] & 0xff) << 6;
> >                         val2 = (in[2] & 0x0f) << 12 | (in[1] & 0xfc) << 4;

Patch
diff mbox series

diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp
index c945edce7..82bc065a5 100644
--- a/src/apps/common/dng_writer.cpp
+++ b/src/apps/common/dng_writer.cpp
@@ -248,6 +248,7 @@  void thumbScanlineIPU3([[maybe_unused]] const FormatInfo &info, void *output,
 
 		uint16_t val1, val2, val3, val4;
 		switch (pixelInBlock % 4) {
+		default:
 		case 0:
 			val1 = (in[1] & 0x03) << 14 | (in[0] & 0xff) << 6;
 			val2 = (in[2] & 0x0f) << 12 | (in[1] & 0xfc) << 4;