https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93970
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Blocks|49774 | Resolution|--- |INVALID --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- The test case in comment #0 cannot be optimized as suggested because *q can be equal to NaN. Replacing the (unfortunately chosen) double with some other type like long shows that the expected optimization is done as expected. $ cat pr93970.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout pr93970.c void f (int *__restrict p, int *__restrict q) { int t = *q; *p = 0; if (t != *q) // folded to false __builtin_abort (); } void g (int *__restrict p, long *__restrict q) { long t = *q; *p = 0; if (t != *q) // also folded as expected __builtin_abort (); } ;; Function f (f, funcdef_no=0, decl_uid=1931, cgraph_uid=1, symbol_order=0) f (int * restrict p, int * restrict q) { <bb 2> [local count: 1073741824]: *p_3(D) = 0; return; } ;; Function g (g, funcdef_no=3, decl_uid=1936, cgraph_uid=2, symbol_order=1) g (int * restrict p, long int * restrict q) { <bb 2> [local count: 1073741824]: *p_2(D) = 0; return; } Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49774 [Bug 49774] [meta-bug] restrict qualification aliasing issues