From: Tony Finch Date: Wed, 5 Oct 2022 11:11:41 +0000 (+0100) Subject: Avoid dead code warning when using a constant boolean X-Git-Tag: v9.19.6~7^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=138908b2110f90754f434527a3786878bcaa0f8d;p=thirdparty%2Fbind9.git Avoid dead code warning when using a constant boolean The value of `sign_bit` is platform-dependent but constant at compile time. Use a cast to convert the boolean `sign_bit` to 0 or 1 instead of ternary `?:` because one branch of the conditional is dead code. (We could leave out the cast to `size_t` but our style prefers to handle booleans more explicitly, hence the `?:` that caused the issue.) *** CID 358310: Possible Control flow issues (DEADCODE) /lib/isc/resource.c: 118 in isc_resource_setlimit() 112 * rlim_t, and whether rlim_t has a sign bit. 113 */ 114 isc_resourcevalue_t rlim_max = UINT64_MAX; 115 size_t wider = sizeof(rlim_max) - sizeof(rlim_t); 116 bool sign_bit = (double)(rlim_t)-1 < 0; 117 >>> CID 358310: Possible Control flow issues (DEADCODE) >>> Execution cannot reach the expression "1" inside this statement: "rlim_max >>= 8UL * wider + ...". 118 rlim_max >>= CHAR_BIT * wider + (sign_bit ? 1 : 0); 119 rlim_value = ISC_MIN(value, rlim_max); 120 } 121 122 rl.rlim_cur = rl.rlim_max = rlim_value; 123 unixresult = setrlimit(unixresource, &rl); --- diff --git a/lib/isc/resource.c b/lib/isc/resource.c index 2f5b47742e4..f6965755dbe 100644 --- a/lib/isc/resource.c +++ b/lib/isc/resource.c @@ -113,9 +113,9 @@ isc_resource_setlimit(isc_resource_t resource, isc_resourcevalue_t value) { */ isc_resourcevalue_t rlim_max = UINT64_MAX; size_t wider = sizeof(rlim_max) - sizeof(rlim_t); - bool sign_bit = (double)(rlim_t)-1 < 0; + size_t sign_bit = (size_t)(0.0 > (double)(rlim_t)-1); - rlim_max >>= CHAR_BIT * wider + (sign_bit ? 1 : 0); + rlim_max >>= CHAR_BIT * wider + sign_bit; rlim_value = ISC_MIN(value, rlim_max); }