https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99270
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Interestingly, in C99 we have: Types are partitioned into object types (types that fully describe objects), function types (types that describe functions), and incomplete types (types that describe objects but lack information needed to determine their sizes). And FILE is specified to be an object type, which means it can't be incomplete. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1439.pdf changed that text for C11 so that incomplete types are a sub-category of object type, and intentionally didn't change the definition of FILE, allowing it to be incomplete (see last page of N1439). Not that it matters, we should fix the test either way. Just a curiosity.