1-bit bitfield in boolean expression

6.13 Control Statement Expressions

Moderators: misra-c, david ward

Post Reply
holger_l
Posts: 2
Joined: Fri Jul 19, 2013 12:26 pm
Company: Continental Teves

1-bit bitfield in boolean expression

Post by holger_l » Mon Jul 22, 2013 9:53 am

Hi,
rule 13.2 makes an example how boolean data could be used in an expression:

Code: Select all

if ( y ) /* Not compliant, unless y is effectively Boolean data (e.g. a flag) */
The example refers to a Boolean-by-enforcement type referred to in the appendix.
But what is with a 1-bit Bitfield? Is it a Boolean-by-construct?

Code: Select all

struct { unsigned int flag1: 1, flag2: 1;} var;
...
if (var.flag1)                   /* violation of rule 13.2 ? */
if (( var.flag1) && (var.flag2)) /* violation of rule 12.6 ? */
if ((!var.flag1) && (var.flag2)) /* 2x violation of rule 12.6 ? */
if ((var.flag1 == 0) && (var.flag2 != 0)) /* OK, but clumsy and harder to read */
Thanks for a comment!

holger_l
Posts: 2
Joined: Fri Jul 19, 2013 12:26 pm
Company: Continental Teves

Re: 1-bit bitfield in boolean expression

Post by holger_l » Tue Jul 30, 2013 3:26 pm

To clarify the question: I think it is obvious that a 1-bit flag is a boolean value, but our checker tool thinks it is not, and only accepts the clumsy form.
Unfortunately MISRA-C 2004 is missing a clear definition and the only hint is that a "flag" is allowed.

misra-c
Posts: 561
Joined: Thu Jan 05, 2006 1:11 pm

Re: 1-bit bitfield in boolean expression

Post by misra-c » Thu Sep 12, 2013 8:43 am

MISRA-C:2004 addresses issues with C:1990

MISRA-C:2004 deliberately did not describe what constituted a Boolean. There were too many different ways of defining the Boolean type in common usage, and no generally accepted single definition. The results of the analysis will therefore depend on the forms of Boolean that the user's analysis tool can be configured to accept.
---
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “6.13 Control Statement Expressions”