Off-topic: Why no compiler warning for this?

Peter Dufault dufault at hda.com
Wed Oct 15 08:14:31 UTC 2014


This is really a gcc question, but with Joel working to wipe out warnings and not wanting to start a thread on another list I'm asking here.  I stumbled on this sequence (obviously simplified) in my code.  The "XXX" indicates a restriction I intended to remove but didn't, and it would have broken new code I've been writing.  I noticed it before hitting the issue.

The ETPU_CHANNEL_BIT macro is appropriate for the MPC5554 eTPUA with channels 0 through 31.  The macro is going to left-shift out of the unit32_t for the channels 32 through 63 in eTPUB (not sure why I bothered with the modulus, it's going to be totally broken for larger channel numbers).  Code:

#include <inttypes.h>

/* XXX Need a way to specify which eTPU the channel is in.
 *     They happen to both be in A.
 */
#define ETPU_CHANNEL_BIT(CHAN) (1 << ((CHAN) % 64))

extern void foo(int chan);
extern void bar(uint32_t bit);

void foo(int chan) {
    uint32_t bit = ETPU_CHANNEL_BIT(chan);
    bar(bit);
}

Here is the optimization level and the compiler warnings I had in effect.  I even added -Wstrict-overflow=5 and -O4 hoping to get a warning without luck.

-O2
-Wall
-Wcast-qual
-Werror
-Wmissing-prototypes
-Wpointer-arith

Anyone else surprised?  Am I missing something obvious?  Any suggested additional warnings?

Peter
-----------------
Peter Dufault
HD Associates, Inc.      Software and System Engineering



More information about the users mailing list