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@xxxxxxxxxx>
--
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@xxxxxxx>
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