https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120358
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Sam James from comment #0) > Looking at dumps between r15-579-ga9251ab3c91c8c and > r15-580-gf3e5f4c58591f5, there's a lot of noise like: > ``` > - # PT = nonlocal escaped null { D.387695 D.418643 } (nonlocal, escaped) > - # USE = nonlocal escaped null { D.387695 D.418643 } (nonlocal, escaped) > - # CLB = nonlocal escaped null { D.387695 D.418643 } (nonlocal, escaped) > + # PT = nonlocal escaped null const-pool { D.387695 D.418643 } (nonlocal, > escaped) > + # USE = nonlocal escaped null const-pool { D.387695 D.418643 } (nonlocal, > escaped) > + # CLB = nonlocal escaped null const-pool { D.387695 D.418643 } (nonlocal, > escaped) > ``` without a testcase it's hard to see what goes wrong - the above is a correctness fix, we get strictly larger points-to sets. For ptr-ptr compares we rely on those being conservative, so possibly we miss more. I'll note the newer preprocessed source doesn't build around the offending rev (the old does). The first actual IL difference happens in VRP1. Differences in wc -l for all dump files (w/o details): qt.ii.120t.threadfull1 0 qt.ii.121t.vrp1 20 qt.ii.122t.dse2 30 .. qt.ii.149t.walloca2 20 qt.ii.150t.pre 29 qt.ii.151t.sink1 53 qt.ii.155t.dse3 43 ... qt.ii.202t.thread2 7 qt.ii.203t.dom3 49 qt.ii.204t.strlen1 39 qt.ii.205t.threadfull2 180 qt.ii.206t.vrp2 106 it's not definite data since there's stuff that should be in -details leaking into normal dumps. It's quite difficult to isolate an offending transform. Possibly adding a dbgcnt to ptrs_compare_unequal when it triggers the ptr-vs.-ptr case can track down the bogus offender...