https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69136
--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Hmm, we have: <function_decl 0x7ffff6cbd700 GrBufferAllocPool type <method_type 0x7ffff6cc10a8 type <void_type 0x7ffff6af0150 void VOID align 8 symtab 0 alias set -1 structural equality pointer_to_this <pointer_type 0x7ffff6af02a0>> QI size <integer_cst 0x7ffff6ad7ca8 constant 8> unit size <integer_cst 0x7ffff6ad7cc0 constant 1> align 8 symtab 0 alias set -1 structural equality method basetype <record_type 0x7ffff6cbe348 GrBufferAllocPool> arg-types <tree_list 0x7ffff6cbb8c0 value <pointer_type 0x7ffff6cbe3f0> chain <tree_list 0x7ffff6cbb898 value <integer_type 0x7ffff6adb7e0 int> chain <tree_list 0x7ffff6ae99b0 value <void_type 0x7ffff6af0150 void>>>>> nothrow public private abstract external virtual QI file /aux/hubicka/skia.ii line 4 col 1 align 16 context <record_type 0x7ffff6cbe348 GrBufferAllocPool>> (gdb) p decl->decl_with_vis.assembler_name $2 = (tree) 0x0 so it seems that the decl was not seen by free_lang_data but still leaked into the stream.