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