Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-93274: Expose receiving vectorcall in the Limited API #95717

Merged
merged 9 commits into from
Aug 8, 2022

Conversation

encukou
Copy link
Member

@encukou encukou commented Aug 5, 2022

@wjakob
Copy link
Contributor

wjakob commented Aug 5, 2022

This looks great. Leaving tp_call unchanged sounds fine as long as PyVectorcall_Call is available as a stable API-exported symbol.

Copy link
Contributor

@erlend-aasland erlend-aasland left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, with minor nits!

BTW, in Modules/_testcapi/vectorcall_limited.c, everything but _PyTestCapi_Init_VectorcallLimited method can be made static. Not that it matters much for a test module, though.

Objects/call.c Outdated
@@ -1047,3 +1047,11 @@ _PyStack_UnpackDict_Free(PyObject *const *stack, Py_ssize_t nargs,
PyMem_Free((PyObject **)stack - 1);
Py_DECREF(kwnames);
}

// Export for the stable ABI
#undef PyVectorcall_NARGS(n)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#undef PyVectorcall_NARGS(n)
#undef PyVectorcall_NARGS

Modules/_testcapi/vectorcall_limited.c Outdated Show resolved Hide resolved
@encukou encukou merged commit 656dad7 into python:main Aug 8, 2022
@encukou encukou deleted the limited-vectorcall branch August 8, 2022 12:12
@erlend-aasland erlend-aasland linked an issue Aug 8, 2022 that may be closed by this pull request
@bedevere-bot
Copy link

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot AMD64 Arch Linux TraceRefs 3.x has failed when building commit 656dad7.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/484/builds/1920) and take a look at the build logs.
  4. Check if the failure is related to this commit (656dad7) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/484/builds/1920

Summary of the results of the build (if available):

Click to see traceback logs
remote: Enumerating objects: 827, done.        
remote: Counting objects:   0% (1/504)        
remote: Counting objects:   1% (6/504)        
remote: Counting objects:   2% (11/504)        
remote: Counting objects:   3% (16/504)        
remote: Counting objects:   4% (21/504)        
remote: Counting objects:   5% (26/504)        
remote: Counting objects:   6% (31/504)        
remote: Counting objects:   7% (36/504)        
remote: Counting objects:   8% (41/504)        
remote: Counting objects:   9% (46/504)        
remote: Counting objects:  10% (51/504)        
remote: Counting objects:  11% (56/504)        
remote: Counting objects:  12% (61/504)        
remote: Counting objects:  13% (66/504)        
remote: Counting objects:  14% (71/504)        
remote: Counting objects:  15% (76/504)        
remote: Counting objects:  16% (81/504)        
remote: Counting objects:  17% (86/504)        
remote: Counting objects:  18% (91/504)        
remote: Counting objects:  19% (96/504)        
remote: Counting objects:  20% (101/504)        
remote: Counting objects:  21% (106/504)        
remote: Counting objects:  22% (111/504)        
remote: Counting objects:  23% (116/504)        
remote: Counting objects:  24% (121/504)        
remote: Counting objects:  25% (126/504)        
remote: Counting objects:  26% (132/504)        
remote: Counting objects:  27% (137/504)        
remote: Counting objects:  28% (142/504)        
remote: Counting objects:  29% (147/504)        
remote: Counting objects:  30% (152/504)        
remote: Counting objects:  31% (157/504)        
remote: Counting objects:  32% (162/504)        
remote: Counting objects:  33% (167/504)        
remote: Counting objects:  34% (172/504)        
remote: Counting objects:  35% (177/504)        
remote: Counting objects:  36% (182/504)        
remote: Counting objects:  37% (187/504)        
remote: Counting objects:  38% (192/504)        
remote: Counting objects:  39% (197/504)        
remote: Counting objects:  40% (202/504)        
remote: Counting objects:  41% (207/504)        
remote: Counting objects:  42% (212/504)        
remote: Counting objects:  43% (217/504)        
remote: Counting objects:  44% (222/504)        
remote: Counting objects:  45% (227/504)        
remote: Counting objects:  46% (232/504)        
remote: Counting objects:  47% (237/504)        
remote: Counting objects:  48% (242/504)        
remote: Counting objects:  49% (247/504)        
remote: Counting objects:  50% (252/504)        
remote: Counting objects:  51% (258/504)        
remote: Counting objects:  52% (263/504)        
remote: Counting objects:  53% (268/504)        
remote: Counting objects:  54% (273/504)        
remote: Counting objects:  55% (278/504)        
remote: Counting objects:  56% (283/504)        
remote: Counting objects:  57% (288/504)        
remote: Counting objects:  58% (293/504)        
remote: Counting objects:  59% (298/504)        
remote: Counting objects:  60% (303/504)        
remote: Counting objects:  61% (308/504)        
remote: Counting objects:  62% (313/504)        
remote: Counting objects:  63% (318/504)        
remote: Counting objects:  64% (323/504)        
remote: Counting objects:  65% (328/504)        
remote: Counting objects:  66% (333/504)        
remote: Counting objects:  67% (338/504)        
remote: Counting objects:  68% (343/504)        
remote: Counting objects:  69% (348/504)        
remote: Counting objects:  70% (353/504)        
remote: Counting objects:  71% (358/504)        
remote: Counting objects:  72% (363/504)        
remote: Counting objects:  73% (368/504)        
remote: Counting objects:  74% (373/504)        
remote: Counting objects:  75% (378/504)        
remote: Counting objects:  76% (384/504)        
remote: Counting objects:  77% (389/504)        
remote: Counting objects:  78% (394/504)        
remote: Counting objects:  79% (399/504)        
remote: Counting objects:  80% (404/504)        
remote: Counting objects:  81% (409/504)        
remote: Counting objects:  82% (414/504)        
remote: Counting objects:  83% (419/504)        
remote: Counting objects:  84% (424/504)        
remote: Counting objects:  85% (429/504)        
remote: Counting objects:  86% (434/504)        
remote: Counting objects:  87% (439/504)        
remote: Counting objects:  88% (444/504)        
remote: Counting objects:  89% (449/504)        
remote: Counting objects:  90% (454/504)        
remote: Counting objects:  91% (459/504)        
remote: Counting objects:  92% (464/504)        
remote: Counting objects:  93% (469/504)        
remote: Counting objects:  94% (474/504)        
remote: Counting objects:  95% (479/504)        
remote: Counting objects:  96% (484/504)        
remote: Counting objects:  97% (489/504)        
remote: Counting objects:  98% (494/504)        
remote: Counting objects:  99% (499/504)        
remote: Counting objects: 100% (504/504)        
remote: Counting objects: 100% (504/504), done.        
remote: Compressing objects:   4% (1/24)        
remote: Compressing objects:   8% (2/24)        
remote: Compressing objects:  12% (3/24)        
remote: Compressing objects:  16% (4/24)        
remote: Compressing objects:  20% (5/24)        
remote: Compressing objects:  25% (6/24)        
remote: Compressing objects:  29% (7/24)        
remote: Compressing objects:  33% (8/24)        
remote: Compressing objects:  37% (9/24)        
remote: Compressing objects:  41% (10/24)        
remote: Compressing objects:  45% (11/24)        
remote: Compressing objects:  50% (12/24)        
remote: Compressing objects:  54% (13/24)        
remote: Compressing objects:  58% (14/24)        
remote: Compressing objects:  62% (15/24)        
remote: Compressing objects:  66% (16/24)        
remote: Compressing objects:  70% (17/24)        
remote: Compressing objects:  75% (18/24)        
remote: Compressing objects:  79% (19/24)        
remote: Compressing objects:  83% (20/24)        
remote: Compressing objects:  87% (21/24)        
remote: Compressing objects:  91% (22/24)        
remote: Compressing objects:  95% (23/24)        
remote: Compressing objects: 100% (24/24)        
remote: Compressing objects: 100% (24/24), done.        
Receiving objects:   0% (1/827)
Receiving objects:   1% (9/827)
Receiving objects:   2% (17/827)
Receiving objects:   3% (25/827)
Receiving objects:   4% (34/827)
Receiving objects:   5% (42/827)
Receiving objects:   6% (50/827)
Receiving objects:   7% (58/827)
Receiving objects:   8% (67/827)
Receiving objects:   9% (75/827)
Receiving objects:  10% (83/827)
Receiving objects:  11% (91/827)
Receiving objects:  12% (100/827)
Receiving objects:  13% (108/827)
Receiving objects:  14% (116/827)
Receiving objects:  15% (125/827)
Receiving objects:  16% (133/827)
Receiving objects:  17% (141/827)
Receiving objects:  18% (149/827)
Receiving objects:  19% (158/827)
Receiving objects:  20% (166/827)
Receiving objects:  21% (174/827)
Receiving objects:  22% (182/827)
Receiving objects:  23% (191/827)
Receiving objects:  24% (199/827)
Receiving objects:  25% (207/827)
Receiving objects:  26% (216/827)
Receiving objects:  27% (224/827)
Receiving objects:  28% (232/827)
Receiving objects:  29% (240/827)
Receiving objects:  30% (249/827)
Receiving objects:  31% (257/827)
Receiving objects:  32% (265/827)
Receiving objects:  33% (273/827)
Receiving objects:  34% (282/827)
Receiving objects:  35% (290/827)
Receiving objects:  36% (298/827)
Receiving objects:  37% (306/827)
Receiving objects:  38% (315/827)
Receiving objects:  39% (323/827)
Receiving objects:  40% (331/827)
Receiving objects:  41% (340/827)
Receiving objects:  42% (348/827)
Receiving objects:  43% (356/827)
Receiving objects:  44% (364/827)
Receiving objects:  45% (373/827)
Receiving objects:  46% (381/827)
Receiving objects:  47% (389/827)
Receiving objects:  48% (397/827)
Receiving objects:  49% (406/827)
Receiving objects:  50% (414/827)
Receiving objects:  51% (422/827)
Receiving objects:  52% (431/827)
Receiving objects:  53% (439/827)
Receiving objects:  54% (447/827)
Receiving objects:  55% (455/827)
Receiving objects:  56% (464/827)
Receiving objects:  57% (472/827)
Receiving objects:  58% (480/827)
Receiving objects:  59% (488/827)
Receiving objects:  60% (497/827)
Receiving objects:  61% (505/827)
Receiving objects:  62% (513/827)
Receiving objects:  63% (522/827)
Receiving objects:  64% (530/827)
Receiving objects:  65% (538/827)
Receiving objects:  66% (546/827)
Receiving objects:  67% (555/827)
Receiving objects:  68% (563/827)
Receiving objects:  69% (571/827)
Receiving objects:  70% (579/827)
Receiving objects:  71% (588/827)
Receiving objects:  72% (596/827)
Receiving objects:  73% (604/827)
Receiving objects:  74% (612/827)
Receiving objects:  75% (621/827)
Receiving objects:  76% (629/827)
Receiving objects:  77% (637/827)
Receiving objects:  78% (646/827)
Receiving objects:  79% (654/827)
Receiving objects:  80% (662/827)
Receiving objects:  81% (670/827)
Receiving objects:  82% (679/827)
Receiving objects:  83% (687/827)
Receiving objects:  84% (695/827)
Receiving objects:  85% (703/827)
Receiving objects:  86% (712/827)
Receiving objects:  87% (720/827)
Receiving objects:  88% (728/827)
Receiving objects:  89% (737/827)
Receiving objects:  90% (745/827)
Receiving objects:  91% (753/827)
Receiving objects:  92% (761/827)
Receiving objects:  93% (770/827)
Receiving objects:  94% (778/827)
Receiving objects:  95% (786/827)
Receiving objects:  96% (794/827)
Receiving objects:  97% (803/827)
Receiving objects:  98% (811/827)
Receiving objects:  99% (819/827)
remote: Total 827 (delta 482), reused 485 (delta 480), pack-reused 323        
Receiving objects: 100% (827/827)
Receiving objects: 100% (827/827), 1.25 MiB | 21.39 MiB/s, done.
Resolving deltas:   0% (0/640)
Resolving deltas:   1% (7/640)
Resolving deltas:   2% (13/640)
Resolving deltas:   3% (20/640)
Resolving deltas:   4% (26/640)
Resolving deltas:   5% (32/640)
Resolving deltas:   6% (39/640)
Resolving deltas:   7% (45/640)
Resolving deltas:   8% (52/640)
Resolving deltas:   9% (58/640)
Resolving deltas:  10% (64/640)
Resolving deltas:  11% (71/640)
Resolving deltas:  12% (77/640)
Resolving deltas:  13% (84/640)
Resolving deltas:  14% (90/640)
Resolving deltas:  15% (96/640)
Resolving deltas:  16% (103/640)
Resolving deltas:  17% (109/640)
Resolving deltas:  18% (116/640)
Resolving deltas:  19% (122/640)
Resolving deltas:  20% (128/640)
Resolving deltas:  21% (135/640)
Resolving deltas:  22% (141/640)
Resolving deltas:  23% (148/640)
Resolving deltas:  24% (154/640)
Resolving deltas:  25% (160/640)
Resolving deltas:  26% (167/640)
Resolving deltas:  27% (173/640)
Resolving deltas:  28% (180/640)
Resolving deltas:  29% (186/640)
Resolving deltas:  30% (192/640)
Resolving deltas:  31% (199/640)
Resolving deltas:  32% (205/640)
Resolving deltas:  33% (212/640)
Resolving deltas:  34% (218/640)
Resolving deltas:  35% (224/640)
Resolving deltas:  36% (231/640)
Resolving deltas:  37% (237/640)
Resolving deltas:  38% (244/640)
Resolving deltas:  39% (250/640)
Resolving deltas:  40% (256/640)
Resolving deltas:  41% (263/640)
Resolving deltas:  42% (269/640)
Resolving deltas:  43% (276/640)
Resolving deltas:  44% (282/640)
Resolving deltas:  45% (288/640)
Resolving deltas:  46% (295/640)
Resolving deltas:  47% (301/640)
Resolving deltas:  48% (308/640)
Resolving deltas:  49% (314/640)
Resolving deltas:  50% (320/640)
Resolving deltas:  51% (327/640)
Resolving deltas:  52% (333/640)
Resolving deltas:  53% (340/640)
Resolving deltas:  54% (346/640)
Resolving deltas:  55% (352/640)
Resolving deltas:  56% (359/640)
Resolving deltas:  57% (365/640)
Resolving deltas:  58% (372/640)
Resolving deltas:  59% (378/640)
Resolving deltas:  60% (384/640)
Resolving deltas:  61% (391/640)
Resolving deltas:  62% (397/640)
Resolving deltas:  63% (404/640)
Resolving deltas:  64% (410/640)
Resolving deltas:  65% (416/640)
Resolving deltas:  66% (423/640)
Resolving deltas:  67% (429/640)
Resolving deltas:  68% (436/640)
Resolving deltas:  69% (442/640)
Resolving deltas:  70% (448/640)
Resolving deltas:  71% (455/640)
Resolving deltas:  72% (461/640)
Resolving deltas:  73% (468/640)
Resolving deltas:  74% (474/640)
Resolving deltas:  75% (480/640)
Resolving deltas:  76% (487/640)
Resolving deltas:  77% (493/640)
Resolving deltas:  78% (500/640)
Resolving deltas:  79% (506/640)
Resolving deltas:  80% (512/640)
Resolving deltas:  81% (519/640)
Resolving deltas:  82% (525/640)
Resolving deltas:  83% (532/640)
Resolving deltas:  84% (538/640)
Resolving deltas:  85% (544/640)
Resolving deltas:  86% (551/640)
Resolving deltas:  87% (557/640)
Resolving deltas:  88% (564/640)
Resolving deltas:  89% (570/640)
Resolving deltas:  90% (576/640)
Resolving deltas:  91% (583/640)
Resolving deltas:  92% (589/640)
Resolving deltas:  93% (596/640)
Resolving deltas:  94% (602/640)
Resolving deltas:  95% (608/640)
Resolving deltas:  96% (615/640)
Resolving deltas:  97% (621/640)
Resolving deltas:  97% (626/640)
Resolving deltas:  98% (628/640)
Resolving deltas:  99% (634/640)
Resolving deltas: 100% (640/640)
Resolving deltas: 100% (640/640), completed with 177 local objects.
From https://github.com/python/cpython
 * branch                  main       -> FETCH_HEAD
 * [new tag]               v3.11.0rc1 -> v3.11.0rc1
Note: switching to '656dad702d3b25bf678ee9bd7109d98876946258'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 656dad702d gh-93274: Expose receiving vectorcall in the Limited API (GH-95717)
Switched to and reset branch 'main'

In file included from ./Include/Python.h:44,
                 from ./Modules/_testcapi/parts.h:1,
                 from ./Modules/_testcapi/vectorcall_limited.c:2:
./Include/object.h:62:4: error: #error Py_LIMITED_API is incompatible with Py_TRACE_REFS
   62 | #  error Py_LIMITED_API is incompatible with Py_TRACE_REFS
      |    ^~~~~
make: *** [Makefile:2857: Modules/_testcapi/vectorcall_limited.o] Error 1

encukou added a commit to encukou/cpython that referenced this pull request Aug 8, 2022
@encukou
Copy link
Member Author

encukou commented Aug 8, 2022

If anyone needs the TraceRefs buildbot green, please merge the revert. I'm working on a fix, so maybe a revert won't be necessary.

@vstinner
Copy link
Member

vstinner commented Aug 8, 2022

https://buildbot.python.org/all/#builders/484/builds/1920 failed to build:

In file included from ./Include/Python.h:44,
                 from ./Modules/_testcapi/parts.h:1,
                 from ./Modules/_testcapi/vectorcall_limited.c:2:
./Include/object.h:62:4: error: #error Py_LIMITED_API is incompatible with Py_TRACE_REFS
   62 | #  error Py_LIMITED_API is incompatible with Py_TRACE_REFS
      |    ^~~~~
make: *** [Makefile:2857: Modules/_testcapi/vectorcall_limited.o] Error 1

If anyone needs the TraceRefs buildbot green, please merge the revert. I'm working on a fix, so maybe a revert won't be necessary.

IMO it's ok if it's broken for a few days, but it would be nice to fix it before next Python (3.12) release.

@encukou
Copy link
Member Author

encukou commented Aug 8, 2022

This'll hopefully fix it: #95796

iritkatriel pushed a commit to iritkatriel/cpython that referenced this pull request Aug 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Receiving vector calls in the Py_LIMITED_API
5 participants