It passes regrtest but causes test_gc to leak 20 objects. 13 from test_finalizer_newclass and 7 from test_del_newclass. These leaks go away if test_saveall is skipped. I've tried earlier versions of this patch (which were ok at the time) and they now create this leak too.
Some change since the last time I worked on interning must have caused this. Either this change reveals a bug in my patch or my patch reveals a subtle bug in the GC.
I don't know why it interacts with GC logic because strings are non-gc objects. I've tried to untrack the interned dictionary because it plays dirty tricks with refcounts but it doesn't change the symptom.
I've seen this too! But only when I run the full test suite, not when I run test_gc in isolation. I made a number of small changes to the GC code, I'll have to roll them back one at a time to see which one caused this -- and then look for a solution. :-(
Duh. This warning is only printed when regrtest.py is given the -l option. Oren's first paragraph quoted above is exactly right. But none of the changes to C files made in the last month made any difference... The difference is test_gc.py itself! With a checkout from a month ago, if I change the classes in test_finalizer() and test_del() to be new-style classes, I get the same warnings. Maybe Tim understands the problem now? (Summary: why do I get the Warning below.) $ ./python ../Lib/test/regrtest.py -l test_gc test_gc Warning: test created 20 uncollectable object(s). 1 test OK. $ --Guido van Rossum (home page: http://www.python.org/~guido/)