https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115437
--- Comment #3 from Kang-Che Sung <Explorer09 at gmail dot com> --- Now I come to realize that the C standard doesn't say that a pointer type is "compatible" with any other pointer type. So that "Foo **" type and "Bar **" type are assumed to never alias. This is troubling because I saw many APIs that would take a "pointer to pointer" argument in order to output address to a particular object (for example, asprintf()), and it would be difficult to write concise code while strictly conforming to the so-called strict aliasing rule.