Message ID | 20240124075604.2635498-1-paul.elder@ideasonboard.com |
---|---|
State | Accepted |
Commit | 64502c8d4a3c0f440bf265a5ad03be00653957ba |
Headers | show |
Series |
|
Related | show |
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 >
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;
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;
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(+)