http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55660
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-12 14:18:46 UTC --- Ok, the issue is we preload char_type_node anyway, as show by Index: gcc/tree-streamer.c =================================================================== --- gcc/tree-streamer.c (revision 194444) +++ gcc/tree-streamer.c (working copy) @@ -237,6 +237,12 @@ streamer_tree_cache_lookup (struct strea static void record_common_node (struct streamer_tree_cache_d *cache, tree node) { + /* Verify we don't recursively pre-load nodes we do not want to preload. */ + gcc_assert (node != char_type_node + && node != boolean_type_node + && node != boolean_true_node + && node != boolean_false_node); + /* We have to make sure to fill exactly the same number of elements for all frontends. That can include NULL trees. As our hash table can't deal with zero entries we'll simply stream this is because we pre-load va_list_type_node (which is required, because we compare that by pointer equality). But the x86 backend (and possibly others) do: static tree ix86_build_builtin_va_list_abi (enum calling_abi abi) { tree f_gpr, f_fpr, f_ovf, f_sav, record, type_decl; /* For i386 we use plain pointer to argument area. */ if (!TARGET_64BIT || abi == MS_ABI) return build_pointer_type (char_type_node); oops.