Title: Reference hunting (python3 -m test -R 3:3) doesn't work if the _abc module is missing
Type: Stage: resolved
Components: Library (Lib) Versions: Python 3.8
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: vstinner
Priority: normal Keywords: patch

Created on 2019-04-08 16:56 by vstinner, last changed 2019-04-08 23:58 by vstinner. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 12733 merged vstinner, 2019-04-08 17:03
PR 12734 merged miss-islington, 2019-04-08 23:36
Messages (3)
msg339661 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-04-08 16:56
Disable the compilation of the built-in _abc module. For example, on Python 3.7 apply the following patch:

diff --git a/Modules/Setup.dist b/Modules/Setup.dist
index 8cc6bf0540..4015527b32 100644
--- a/Modules/Setup.dist
+++ b/Modules/Setup.dist
@@ -114,7 +114,7 @@ _weakref _weakref.c                 # weak references
 _functools -DPy_BUILD_CORE _functoolsmodule.c   # Tools for working with functions and callable objects
 _operator _operator.c                  # operator.add() and similar goodies
 _collections _collectionsmodule.c      # Container types
-_abc _abc.c                            # Abstract base classes
+#_abc _abc.c                           # Abstract base classes
 itertools itertoolsmodule.c            # Functions creating iterators for efficient looping
 atexit atexitmodule.c                  # Register functions to be run at interpreter-shutdown
 _signal -DPy_BUILD_CORE signalmodule.c
@@ -363,7 +363,8 @@ xxsubtype xxsubtype.c
 # Uncommenting the following line tells makesetup that all following modules
 # are not built (see above for more detail).
 #_sqlite3 _tkinter _curses pyexpat
 #_codecs_jp _codecs_kr _codecs_tw unicodedata

Recompile Python, check:

$ ./python -c 'import _abc'
ModuleNotFoundError: No module named '_abc'


$ ./python -u -m test -R 3:3 test_functools -m test_mro_conflicts 

Error without _abc:

test test_functools crashed -- Traceback (most recent call last):
  File "/home/vstinner/prog/python/3.7/Lib/test/libregrtest/", line 180, in runtest_inner
    refleak = dash_R(the_module, test, test_runner, ns.huntrleaks)
  File "/home/vstinner/prog/python/3.7/Lib/test/libregrtest/", line 71, in dash_R
  File "/home/vstinner/prog/python/3.7/Lib/test/libregrtest/", line 148, in dash_R_cleanup
  File "/home/vstinner/prog/python/3.7/Lib/", line 60, in register
    raise TypeError("Can only register classes")
TypeError: Can only register classes

With built-in _abc module, regrtest is fine.

The problem comes from pure-Python reimplementation of abc._get_dump() in Lib/test/libregrtest/

    def _get_dump(cls):
        # For legacy Python version
        return (cls._abc_registry, cls._abc_cache,
                cls._abc_negative_cache, cls._abc_negative_cache_version)

The first item tuple must be a set of weak references. Currently, it's a weak set of strong references.

Attached PR fix the issue.
msg339685 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-04-08 23:36
New changeset 79b5d29041bd85ea3baa050b3fa2481344ea35c9 by Victor Stinner in branch 'master':
bpo-36565: Fix libregrtest for Python without builtin _abc (GH-12733)
msg339686 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-04-08 23:54
New changeset 2368d86ed1249505b10561e005fc57f4884619c1 by Victor Stinner (Miss Islington (bot)) in branch '3.7':
bpo-36565: Fix libregrtest for Python without builtin _abc (GH-12733) (GH-12734)
Date User Action Args
2019-04-08 23:58:35vstinnersetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2019-04-08 23:54:24vstinnersetmessages: + msg339686
2019-04-08 23:36:55miss-islingtonsetpull_requests: + pull_request12657
2019-04-08 23:36:50vstinnersetmessages: + msg339685
2019-04-08 17:03:21vstinnersetkeywords: + patch
stage: patch review
pull_requests: + pull_request12656
2019-04-08 16:56:30vstinnercreate