I'm trying to put together a macro to abstract away some compiler differences, but I'm having trouble with __builtin_assume_aligned, and I'm not sure how to generate a reliable test case. For ICC there is __assume_aligned. This is what I'm looking to emulate; you just pass it a pointer and the desired alignment: __assume_aligned(arg, 16) /* Compiler knows arg is 16-byte aligned */ For MSVC there is __assume, which is a bit of a pain to use, but basically you pass an expression (which evaluates to true if the variable is aligned as expected). Something like __assume((((char*) arg) - ((char*) 0)) % (16) == 0) /* Compiler knows arg is 16-byte aligned */ GCC 4.7+, OTOH, does things a bit different. It returns a value, and you're supposed to use the returned value: void* x = __builtin_assume_aligned(arg, 16); /* Compiler knows x is 16-byte aligned */ My question is, with __builtin_assume_aligned, does GCC know that *arg* (not x) is 16-byte aligned? Basically, can I use it like __assume_aligned? Also, for 4.5+ (when __builtin_unreachable was added), if I do something like #define assume_aligned(arg, align) \ ((((char*) ptr) - ((char*) 0)) % (align) == 0) ? \ (0) : __builtin_unreachable() Would GCC know that arg is aligned? -Evan