Skip to content

Avoid dead code warning when using a constant boolean

Tony Finch requested to merge 3580-coverity-constant-boolean-dead-code into main

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);

Closes #3580 (closed)

Merge request reports