https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91227
Bug ID: 91227 Summary: pointer relational expression not folded but equivalent inequality is Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- GCC folds the pointer inequality in function f below to false but it doesn't fold the equivalent relational expression in g. $ cat b.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout b.c void f (char *p) { char a[3]; if (p == a || p == a + 1 || p == a + 2 || p == a + 3) __builtin_abort (); } void g (char *p) { char a[3]; if (p >= a || p <= a + 3) __builtin_abort (); } ;; Function f (f, funcdef_no=0, decl_uid=1908, cgraph_uid=1, symbol_order=0) f (char * p) { <bb 2> [local count: 1073741824]: return; } ;; Function g (g, funcdef_no=1, decl_uid=1912, cgraph_uid=2, symbol_order=1) g (char * p) { char a[3]; _Bool _5; _Bool _6; _Bool _7; <bb 2> [local count: 1073741824]: _5 = &MEM <char[3]> [(void *)&a + 3B] >= p_1(D); _6 = &a <= p_1(D); _7 = _5 | _6; if (_7 != 0) goto <bb 3>; [0.00%] else goto <bb 4>; [100.00%] <bb 3> [count: 0]: __builtin_abort (); <bb 4> [local count: 1073741824]: a ={v} {CLOBBER}; return; }