Index: tree.c =================================================================== --- tree.c (revision 127226) +++ tree.c (working copy) @@ -3077,7 +3077,7 @@ build2_stat (enum tree_code code, tree t if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt) gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0)) - && TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE + && INTEGRAL_TYPE_P (TREE_TYPE (arg1)) && useless_type_conversion_p (sizetype, TREE_TYPE (arg1))); t = make_node_stat (code PASS_MEM_STAT); Index: testsuite/gcc.c-torture/compile/pr32988.c =================================================================== --- testsuite/gcc.c-torture/compile/pr32988.c (revision 0) +++ testsuite/gcc.c-torture/compile/pr32988.c (revision 0) @@ -0,0 +1,20 @@ +enum zone_type { + ZONE_DMA, + ZONE_NORMAL, + ZONE_MOVABLE, + MAX_NR_ZONES +}; +static unsigned long arch_zone_lowest_possible_pfn[MAX_NR_ZONES]; +static unsigned long arch_zone_highest_possible_pfn[MAX_NR_ZONES]; +void free_area_init_nodes(unsigned long *max_zone_pfn) +{ + enum zone_type i; + for (i = 1; i < MAX_NR_ZONES; i++) + { + if (i == ZONE_MOVABLE) + continue; + unsigned long _x = max_zone_pfn[i]; + unsigned long _y = arch_zone_lowest_possible_pfn[i]; + arch_zone_highest_possible_pfn[i] = _x > _y ? _x : _y; + } +}