Thread (34 messages) 34 messages, 7 authors, 2025-12-06

Re: [PATCH v2 9/9] iio: adc: ad4062: Add GPIO Controller support

From: Jorge Marques <hidden>
Date: 2025-12-05 11:53:28
Also in: linux-doc, linux-gpio, linux-iio, lkml

On Fri, Dec 05, 2025 at 12:21:31AM +0200, Andy Shevchenko wrote:
On Thu, Dec 4, 2025 at 11:38 PM Jorge Marques [off-list ref] wrote:
quoted
On Thu, Nov 27, 2025 at 11:20:54AM +0200, Andy Shevchenko wrote:
quoted
On Wed, Nov 26, 2025 at 04:55:41PM +0100, Jorge Marques wrote:
quoted
On Mon, Nov 24, 2025 at 12:40:37PM +0200, Andy Shevchenko wrote:
quoted
On Mon, Nov 24, 2025 at 10:18:08AM +0100, Jorge Marques wrote:
...
quoted
quoted
quoted
quoted
quoted
+       return reg_val == AD4062_GP_STATIC_HIGH ? 1 : 0;
  return !!(reg_val == AD4062_GP_STATIC_HIGH);

also will work.
    return reg_val == AD4062_GP_STATIC_HIGH;
Hmm... This will include implicit bool->int. The !! guarantees values 0 or 1,
but I don't remember about implicit bool->int case.
quoted
I don't think the implicit bool->int is an issue, grepping `return .* == .*;`
matches a few methods that return int.
Yes, the Q here is the value of true _always_ be promoted to 1?
Hi Andy,

The relational operator result has type int (c99 6.5.9 Equality
operators); and when any scalar value is converted to _Bool, the result
is 0 if the value compares equal to 0; otherwise, the result is 1 (c99
6.3.1.2).
https://www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf

No conversion warnings even when forcing _Bool type.
There are many usages like this, for example:

drivers/iio/accel/adxl313_core.c @ int adxl313_is_act_inact_ac()
drivers/iio/light/opt4060.c @ int opt4060_read_event_config()
drivers/iio/light/tsl2772.c @ int tsl2772_device_id_verify()
lib/zstd/compress/zstd_fast.c @ int ZSTD_match4Found_branch()

I cannot find many legitimate usage of relational operator with the
double negation.
  git ls-files | xargs grep -s 'return !!' | grep '=='
quoted
Experimenting with the _Bool type (gcc 15, clang 19, any std version),

        int main()
        {
            int a = 1;
            int b = 2;

            return (_Bool)(a == b);
        }

with
gcc -Wall -W -pedantic -std=c23 -c test.c
clang -Wall -Wextra -Wbool-conversion -std=c11 -O2 test.c

also doesn't raise warnings.
Of course, because before even looking into warnings the entire code
degrades to return 0. I.o.w., the test case is not correct. But don't
hurry up to fix it, you won't get warnings anyway, it's all about C
standard and not about (in)correctness of the code. See above.

-- 
With Best Regards,
Andy Shevchenko
Best Regards,
Jorge
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help