https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97857
--- Comment #10 from Jan Hubicka <hubicka at ucw dot cz> --- So I think I know what happens. It is actually the pre-existing problem I mentioned in https://gcc.gnu.org/pipermail/gcc-patches/2020-November/559017.html the iterator is small type consiting of two pointers and thus at WPA time it gets conflict with non-ODR type and all iterators become the same. At ltrans however with fortunate partitioning this does not need to happen (which is where -fproifle-use comes into game: it reorders the code) we end up with separate ODR types because the C type is not streamed in. I am testing fix