[cfe-dev] Warnings from macro expansions vs system headers

Sean McBride sean at rogue-research.com
Thu Nov 8 14:15:32 PST 2012

Hi all,

Is it expected that I get a warning from this, since the macro expansion happens in my source file, despite the "buggy" macro contents being in a system header?  (I filed <rdar://12665902> against the header regardless BTW.)

#include <IOKit/IOReturn.h>

int main (void)
	IOReturn ioReturnValue = kIOReturnExclusiveAccess;

	return 0;

clang -Wshift-sign-overflow -fsyntax-only ~/Desktop/test.c

/Users/sean/Desktop/test.c:5:27: warning: signed shift result (0xE0000000) sets the sign bit of the shift expression's type ('int') and becomes negative [-Wshift-sign-overflow]
        IOReturn ioReturnValue = kIOReturnExclusiveAccess;
/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h:84:34: note: expanded from macro 'kIOReturnExclusiveAccess'
#define kIOReturnExclusiveAccess iokit_common_err(0x2c5) // exclusive access and
/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h:70:44: note: expanded from macro 'iokit_common_err'
#define iokit_common_err(return)          (sys_iokit|sub_iokit_common|return)
/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h:48:43: note: expanded from macro 'sys_iokit'
#define sys_iokit                         err_system(0x38)
/usr/include/mach/error.h:83:35: note: expanded from macro 'err_system'
#define err_system(x)           (((x)&0x3f)<<26)
                                 ~~~~~~~~~~^ ~~



More information about the cfe-dev mailing list