| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
| PyObject **base = (PyObject **)frame; | ||
| // Make sure that this is, indeed, the top frame. We can't check this in | ||
| // _PyThreadState_PopFrame, since f_code is already cleared at that point: | ||
| assert(base + frame->f_code->co_framesize == tstate->datastack_top); |
There was a problem hiding this comment.
@pablogsal, just curious: does adding this assert (and not the fix) make tons of tests crash on your build?
If so, my theory is that your compiler is optimizing out the old assert, since the failing case is always undefined behavior according to the C standard.
Sorry, something went wrong.
There was a problem hiding this comment.
I will test this night or tomorrow, but I checked and I was indeed compiling in debug mode with asserts, so the old assert should have triggered. I'm curious to see what's going on so I will also investigate that, but that won't affect this issue or the PR, is just that I'm very curious to see what's going on there :)
Sorry, something went wrong.
There was a problem hiding this comment.
Well, even if asserts were turned on, the inequality comparison between the pointers would be undefined if they're part of different allocations. Which is exactly the situation it was checking for!
So if the compiler could somehow prove that the comparison it was always true when the result was defined, it could have optimized it into assert(1) or something.
Sorry, something went wrong.
There was a problem hiding this comment.
But yeah, it doesn't affect this PR. The thing that's better about this new assert is that it's never undefined, and we don't need to overflow our stack chunk to trigger it. One failed call should do it (which is why so many tests crash if you add this without the fix).
Sorry, something went wrong.
There was a problem hiding this comment.
So if the compiler could somehow prove that the comparison it was always true when the result was defined, it could have optimized it into assert(1) or something.
I don't think so because I was compiling with -O0. If the compiler was being smart there I want my money back 🤣
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM
Great work 👌
Sorry, something went wrong.
| self.assertIsInstance(res, dict) | ||
| self.assertEqual(list(res.items()), expected) | ||
|
|
||
| def test_frames_are_popped_after_failed_calls(self): |
There was a problem hiding this comment.
Not that it matters much, but maybe you want to add the CPython specific decorator
Sorry, something went wrong.
There was a problem hiding this comment.
I thought about that, but I figure that this should still pass on any CPython implementation. If you somehow crash here, it's a bug, right? 😉
Sorry, something went wrong.
There was a problem hiding this comment.
Yeah, we have been approaching these kind of tests in different ways so it doesn't matter :)
Sorry, something went wrong.
|
🤖 New build scheduled with the buildbot fleet by @brandtbucher for commit 5b46418 🤖 If you want to schedule another build, you need to add the ":hammer: test-with-buildbots" label again. |
Sorry, something went wrong.
|
Not sure why some of the wasm32 buildbots are failing, but it looks totally unrelated to these changes: Warnings: ../../Python/initconfig.c:2284:27: warning: format specifies type 'wint_t' (aka 'int') but the argument has type 'wint_t' (aka 'unsigned int') [-Wformat] ../../Python/initconfig.c:2284:42: warning: format specifies type 'wint_t' (aka 'int') but the argument has type 'wint_t' (aka 'unsigned int') [-Wformat] ../../Python/pytime.c:297:10: warning: implicit conversion from 'long long' to 'double' changes value from 9223372036854775807 to 9223372036854775808 [-Wimplicit-const-int-float-conversion] ../../Python/pytime.c:352:14: warning: implicit conversion from 'long long' to 'double' changes value from 9223372036854775807 to 9223372036854775808 [-Wimplicit-const-int-float-conversion] ../../Python/pytime.c:518:10: warning: implicit conversion from 'long long' to 'double' changes value from 9223372036854775807 to 9223372036854775808 [-Wimplicit-const-int-float-conversion] ../../Modules/expat/xmlparse.c:3107:9: warning: code will never be executed [-Wunreachable-code] ../../Modules/expat/xmlparse.c:4050:9: warning: code will never be executed [-Wunreachable-code] ../../Modules/expat/xmlparse.c:7681:11: warning: format specifies type 'int' but the argument has type 'ptrdiff_t' (aka 'long') [-Wformat] ../../Modules/socketmodule.c:4001:33: warning: comparison of integers of different signs: 'unsigned long' and 'long' [-Wsign-compare] ../../Modules/socketmodule.c:4054:33: warning: comparison of integers of different signs: 'unsigned long' and 'long' [-Wsign-compare] ../../Modules/socketmodule.c:4678:54: warning: comparison of integers of different signs: 'unsigned long' and 'long' [-Wsign-compare] Error: error: unable to open output file 'Modules/_testcapi/vectorcall.o': 'No such file or directory' Maybe related to #93649? |
Sorry, something went wrong.
Ah, yes, it is: #94549 (comment) |
Sorry, something went wrong.
|
Thanks @brandtbucher for the PR 🌮🎉.. I'm working now to backport this PR to: 3.11. |
Sorry, something went wrong.
|
GH-94699 is a backport of this pull request to the 3.11 branch. |
Sorry, something went wrong.
There was a problem hiding this comment.
Post commit LGTM.
Sorry, something went wrong.
FYI, I have fixed the WASM buildbot issues in #94695. Once dependency was wrong and a directory was missing for OOT builds. |
Sorry, something went wrong.
…thonGH-94693) (cherry picked from commit 8a285df) Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com>
| Back | FazBrowse Home | New Git URL |
Also, add an assert so that things like this fail much earlier (and more clearly) on debug builds.