On 09.08.25 11:36, Brahmajit Das wrote:
> On 09.08.2025 04:45, Brahmajit Das wrote:
>> Hello Developers,
>>
>> Building linux-next with GCC 16 results in this following build error
>>
>> $ make
>>   CALL    scripts/checksyscalls.sh
>>   DESCEND objtool
>>   INSTALL libsubcmd_headers
>>   CC      drivers/gpu/drm/radeon/r600_cs.o
>> drivers/gpu/drm/radeon/r600_cs.c: In function ‘r600_texture_size’:
>> drivers/gpu/drm/radeon/r600_cs.c:1411:29: error: variable ‘level’ set but 
>> not used [-Werror=unused-but-set-variable=]
>>  1411 |         unsigned offset, i, level;
>>       |                             ^~~~~
>> cc1: all warnings being treated as errors
>> make[6]: *** [scripts/Makefile.build:287: drivers/gpu/drm/radeon/r600_cs.o] 
>> Error 1
>> make[5]: *** [scripts/Makefile.build:556: drivers/gpu/drm/radeon] Error 2
>> make[4]: *** [scripts/Makefile.build:556: drivers/gpu/drm] Error 2
>> make[3]: *** [scripts/Makefile.build:556: drivers/gpu] Error 2
>> make[2]: *** [scripts/Makefile.build:556: drivers] Error 2
>> make[1]: *** [/home/listout/linux/Makefile:2011: .] Error 2
>> make: *** [Makefile:248: __sub-make] Error 2
>>
>> I'm not sure whether this is kernel bug or GCC bug at the moment. But
>> building with GCC 15 does not give this error, hence I'm more inclined
>> towards the latter.
>> Planning to also report this on GCC side, wanted to get some
>> opinion/feedback from kernel devs as well.
>> I'm on GCC 16.0.0_p2025080.
>>
>> -- 
>> Regards,
>> listout
> 
> After giving a more thorough look, the level usage seems like dead code?
> It's just set (level = blevel) and incremented in the loop (level++). I
> don't see any other usage of the level variable. So if we do something
> like
> 
> diff --git a/drivers/gpu/drm/radeon/r600_cs.c 
> b/drivers/gpu/drm/radeon/r600_cs.c
> index ac77d1246b94..953ce0c57dfb 100644
> --- a/drivers/gpu/drm/radeon/r600_cs.c
> +++ b/drivers/gpu/drm/radeon/r600_cs.c
> @@ -1408,7 +1408,7 @@ static void r600_texture_size(unsigned nfaces, unsigned 
> blevel, unsigned llevel,
>                             unsigned block_align, unsigned height_align, 
> unsigned base_align,
>                             unsigned *l0_size, unsigned *mipmap_size)
>  {
> -     unsigned offset, i, level;
> +     unsigned offset, i;
>       unsigned width, height, depth, size;
>       unsigned blocksize;
>       unsigned nbx, nby;
> @@ -1420,7 +1420,7 @@ static void r600_texture_size(unsigned nfaces, unsigned 
> blevel, unsigned llevel,
>       w0 = r600_mip_minify(w0, 0);
>       h0 = r600_mip_minify(h0, 0);
>       d0 = r600_mip_minify(d0, 0);
> -     for(i = 0, offset = 0, level = blevel; i < nlevels; i++, level++) {
> +     for(i = 0, offset = 0; i < nlevels; i++) {
>               width = r600_mip_minify(w0, i);
>               nbx = r600_fmt_get_nblocksx(format, width);
> 
> I think it should be fine.

Looks valid to me. Potentially just copy&pasted from some older HW generation 
and not correctly adjusted for r600.

But the HW handled here is >15 years and the code easily >10 years old. I'm 
really wondering why gcc only complains now?

Regards,
Christian.

> 
> Would really appreciate some feedback.
> (CC-ed Dave)
> 

Reply via email to