http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55570
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-12-03 10:07:22 UTC --- That's because in 4.8/4.7 we introduced c-family/c-common.c:check_user_alignment which contains: if (!INTEGRAL_TYPE_P (TREE_TYPE (align)) || TREE_CODE (align) != INTEGER_CST) { error ("requested alignment is not an integer constant"); return -1; } but when we get undefined macro as a parameter, the TREE_CODE of align is IDENTIFIER_NODE: (gdb) call debug_tree (align) <identifier_node 0x7ffff1aa9690 SOME_NOT_DEFINED_MACRO> but we don't check for that.