2018-01-01 18:21:31

by Eduardo Valentin

[permalink] [raw]
Subject: Re: thermal/drivers/hisi: Remove bogus const from function return type

Hello Geert,

On Sun, Nov 19, 2017 at 12:04:27PM +0100, Geert Uytterhoeven wrote:
> With gcc-4.1.2:
>
> drivers/thermal/hisi_thermal.c: In function ‘hisi_thermal_probe’:
> drivers/thermal/hisi_thermal.c:530: warning: type qualifiers ignored on function return type
>
> Remove the "const" keyword to fix this.

Interesting.

I intentionally asked Daniel to include the modifier because sparse
pointed this to me:

This patch adds this issue to hisi driver (sparse)

drivers/thermal/hisi_thermal.c:398:24: warning: incorrect type in assignment (different modifiers)
drivers/thermal/hisi_thermal.c:398:24: expected int ( *platform_probe )( ... )
drivers/thermal/hisi_thermal.c:398:24: got void const *

which makes sense to me to be const, given that it is receiving the return
of a function which returns a const void *.
nclude/linux/of_device.h:extern const void *of_device_get_match_data(const struct device *dev);

Cheers,


2018-01-02 07:36:34

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: thermal/drivers/hisi: Remove bogus const from function return type

Hi Eduardo,

On Mon, Jan 1, 2018 at 7:21 PM, Eduardo Valentin <[email protected]> wrote:
> On Sun, Nov 19, 2017 at 12:04:27PM +0100, Geert Uytterhoeven wrote:
>> With gcc-4.1.2:
>>
>> drivers/thermal/hisi_thermal.c: In function ‘hisi_thermal_probe’:
>> drivers/thermal/hisi_thermal.c:530: warning: type qualifiers ignored on function return type
>>
>> Remove the "const" keyword to fix this.
>
> Interesting.
>
> I intentionally asked Daniel to include the modifier because sparse
> pointed this to me:
>
> This patch adds this issue to hisi driver (sparse)
>
> drivers/thermal/hisi_thermal.c:398:24: warning: incorrect type in assignment (different modifiers)
> drivers/thermal/hisi_thermal.c:398:24: expected int ( *platform_probe )( ... )
> drivers/thermal/hisi_thermal.c:398:24: got void const *

Sparse doesn't like assigning void pointers to function pointers without a cast.

> which makes sense to me to be const, given that it is receiving the return
> of a function which returns a const void *.
> nclude/linux/of_device.h:extern const void *of_device_get_match_data(const struct device *dev);

That const applies to what is returned by of_device_get_match_data() (a const
void *), not to what is returned by the returned function (an int).

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds