Re: [PATCH] ia64: Fix build error due to switch case label appearing next to declaration

From: James Morse
Date: Wed Jan 18 2023 - 07:25:22 EST


Hi Sergei,

On 17/01/2023 19:31, Sergei Trofimovich wrote:
> On Tue, 17 Jan 2023 15:16:32 +0000
> James Morse <james.morse@xxxxxxx> wrote:
>
>> Since commit aa06a9bd8533 ("ia64: fix clock_getres(CLOCK_MONOTONIC) to
>> report ITC frequency"), gcc 10.1.0 fails to build ia64 with the gnomic:
>> | ../arch/ia64/kernel/sys_ia64.c: In function 'ia64_clock_getres':
>> | ../arch/ia64/kernel/sys_ia64.c:189:3: error: a label can only be part of a statement and a declaration is not a statement
>> | 189 | s64 tick_ns = DIV_ROUND_UP(NSEC_PER_SEC, local_cpu_data->itc_freq);
>>
>> This line appears immediately after a case label in a switch.
>>
>> Move the declarations out of the case, to the top of the function.
>>
>> Fixes: aa06a9bd8533 ("ia64: fix clock_getres(CLOCK_MONOTONIC) to report ITC frequency")
>> Signed-off-by: James Morse <james.morse@xxxxxxx>

> Out of curiosity what compiler version behaves like that? I think I and
> matoro build-/run-tested it on gcc-12 and maybe gcc-11.

| # ia64-linux-gcc --version
| ia64-linux-gcc (GCC) 10.1.0
| Copyright (C) 2020 Free Software Foundation, Inc.
| This is free software; see the source for copying conditions. There is NO
| warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

The toolchain originally came from https://mirrors.edge.kernel.org/pub/tools/crosstool/

The really odd thing I'm doing is cross compiling for ia64 on arm64 ... but I wouldn't
have thought the toolchain configuration was any different.


> Thank you!
>
> Reviewed-by: Sergei Trofimovich <slyich@xxxxxxxxx>


Thanks,

James