https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83048

            Bug ID: 83048
           Summary: wrap multi-statement macros in do {} while (0)
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

This command:
...
$ rm -f OUTPUT; for f in $(find . -type f | egrep -v '\.git|/testsuite/'); do
echo $f; ( perl -p -e 's/\\\n//' $f| egrep "^#define.*;.*;$"| egrep -v
'case|break'); done | grep -B1 'define' > OUTPUT
...

finds some candidates for fixing, f.i. in libobjc/class.c:
...
#define CLASS_TABLE_HASH(INDEX, HASH, CLASS_NAME)          \
  HASH = 0;                                                  \
  for (INDEX = 0; CLASS_NAME[INDEX] != '\0'; INDEX++)        \
    {                                                        \
      HASH = (HASH << 4) ^ (HASH >> 28) ^ CLASS_NAME[INDEX]; \
    }                                                        \
                                                             \
  HASH = (HASH ^ (HASH >> 10) ^ (HASH >> 20)) & CLASS_TABLE_MASK;
...

Reply via email to