https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105864
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- A testcase where not doing the storing would might give wrong code: using nullptr_t = decltype(nullptr); [[gnu::noipa]] void test(nullptr_t* p) { *p = nullptr; } int main(void) { nullptr_t t, t1 = nullptr; test(&t); char a[sizeof(t)], a1[sizeof(t)]; __builtin_memcpy(&a[0], &t, sizeof(t)); __builtin_memcpy(&a1[0], &t1, sizeof(t)); if (__builtin_memcmp(&a[0], &a1[0], sizeof(a)) != 0) __builtin_abort(); return 0; } So I suspect this should be marked as invalid.