Linux mainline and linux next arm64 builds failed with gcc-7.3.x.
drivers/usb/typec/tcpm/tcpm.c: In function 'run_state_machine': drivers/usb/typec/tcpm/tcpm.c:4724:3: error: case label does not reduce to an integer constant case BDO_MODE_TESTDATA: ^~~~ make[4]: *** [scripts/Makefile.build:288: drivers/usb/typec/tcpm/tcpm.o] Error 1 ^ Reported-by: Linux Kernel Functional Testing lkft@linaro.org
-- Linaro LKFT https://lkft.linaro.org
https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-mainline/DISTRO=...
On 4/21/22 12:03, Naresh Kamboju wrote:
Linux mainline and linux next arm64 builds failed with gcc-7.3.x.
drivers/usb/typec/tcpm/tcpm.c: In function 'run_state_machine': drivers/usb/typec/tcpm/tcpm.c:4724:3: error: case label does not reduce to an integer constant case BDO_MODE_TESTDATA: ^~~~ make[4]: *** [scripts/Makefile.build:288: drivers/usb/typec/tcpm/tcpm.o] Error 1 ^ Reported-by: Linux Kernel Functional Testing lkft@linaro.org
--
That code is several years old, the define is a constant, and I don't see a recent change in the code. What am I missing ?
Guenter
Hi--
On 4/21/22 13:36, Guenter Roeck wrote:
On 4/21/22 12:03, Naresh Kamboju wrote:
Linux mainline and linux next arm64 builds failed with gcc-7.3.x.
drivers/usb/typec/tcpm/tcpm.c: In function 'run_state_machine': drivers/usb/typec/tcpm/tcpm.c:4724:3: error: case label does not reduce to an integer constant case BDO_MODE_TESTDATA: ^~~~ make[4]: *** [scripts/Makefile.build:288: drivers/usb/typec/tcpm/tcpm.o] Error 1 ^ Reported-by: Linux Kernel Functional Testing lkft@linaro.org
--
That code is several years old, the define is a constant, and I don't see a recent change in the code. What am I missing ?
See a recent patch for the same problem in a different area:
commit 1ef8715975de Author: Borislav Petkov bp@suse.de Date: Tue Apr 5 17:15:08 2022 +0200
ALSA: usb-audio: Fix undefined behavior due to shift overflowing the constant
so those constants probably need to be cast to unsigned int. (I guess)
On 4/21/22 15:27, Randy Dunlap wrote:
Hi--
On 4/21/22 13:36, Guenter Roeck wrote:
On 4/21/22 12:03, Naresh Kamboju wrote:
Linux mainline and linux next arm64 builds failed with gcc-7.3.x.
drivers/usb/typec/tcpm/tcpm.c: In function 'run_state_machine': drivers/usb/typec/tcpm/tcpm.c:4724:3: error: case label does not reduce to an integer constant case BDO_MODE_TESTDATA: ^~~~ make[4]: *** [scripts/Makefile.build:288: drivers/usb/typec/tcpm/tcpm.o] Error 1 ^ Reported-by: Linux Kernel Functional Testing lkft@linaro.org
--
That code is several years old, the define is a constant, and I don't see a recent change in the code. What am I missing ?
See a recent patch for the same problem in a different area:
commit 1ef8715975de Author: Borislav Petkov bp@suse.de Date: Tue Apr 5 17:15:08 2022 +0200
ALSA: usb-audio: Fix undefined behavior due to shift overflowing the constant
so those constants probably need to be cast to unsigned int. (I guess)
Turns out other versions of gcc are "affected" as well.
$ cc -Wall -std=c11 -pedantic -pedantic-errors testc.c testc.c: In function ‘main’: testc.c:16:2: error: case label is not an integer constant expression [-Wpedantic] 16 | case BDO_MODE_TESTDATA: | ^~~~
... but _only_ with "-std=c11 -pedantic -pedantic-errors" or with "-fsanitize=shift".
It wants #define BDO_MODE_TESTDATA (8u << 28)
Pedantic indeed ...
Guenter