https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116526
--- Comment #6 from Filip Kastl <pheeck at gcc dot gnu.org> --- (In reply to Filip Kastl from comment #4) > If I change it to > be non-empty, I avoid the ICE. That makes sense, since then GCC knows 'if > (_2 == &a)' is always false and therefore the call to memcpy is unreachable. Sorry, I wrote this in a confusing way. If the set is empty, GCC can and will optimize the memcpy out. If I intervene using a debugger and change the set to be non-empty (I do this after ipa-pta has finished), memcpy doesn't get optimized out and the ICE doesn't happen.
