This turns out to be a misuse of pointer aliasing by SQLite, not a bug in GCC. I'll fix the SQLite code soon. I could insert here a lengthy rant about how the C programming language has been thoroughly broken by the "standards committee" to the point that it is no longer possible to use it safely and effectively. But that rant has been made by others already who are far more eloquent than me, so I will spare you all.