-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
test_strftime_y2k
fails on embedded Linux
#123681
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
Comments
It seems that only tests for the C implementation fail. We can try to move the detection from the compile time to the run time, like for Python implementation. But it is a puzzle why it does not work here. |
(Forget my comment that I deleted, I looked at the wrong commit). I think we can improve the configure.ac detection by including the weird cases. Or maybe the test is broken because of this: if _time.strftime('%F', (1900, 1, 1, 0, 0, 0, 0, 1, 0)) == '1900-01-01':
specifiers += 'FC' (Those are the two failing specifiers) |
This particular test failure could be a bit weird, since this CI job involves cross-compiling Python and then running the test suite under emulation. Not sure if it's a "real" issue, or if we should just skip the test (like we do for others). |
Does it mean that the configure tests might not be correct (or inconsistent because they were done using cross-compilation?) If so, we can just outright ignore the test I guess? |
If these configure tests are not correct, then other configure tests can be not correct too. |
Ha! I knew I should have looked more in detail the logs: On aarch64-unknown-linux-gnu (failing tests), we have two different configure:
So it appears we have different ./configure. I don't know which one is actually being used at runtime in the emulated environment. Now, both '%F' and '%C' are C99-specific (https://en.cppreference.com/w/c/chrono/strftime) so the following if _time.strftime('%F', (1900, 1, 1, 0, 0, 0, 0, 1, 0)) == '1900-01-01':
specifiers += 'FC' is perhaps a too broad check. Since specifiers 'F' and 'C' are used, we actually expect to support if (strftime(full_date, sizeof(full_date), "%F", &date) && !strcmp(full_date, "1900-01-01")) {
return 0;
} In other words, either I'm tired so what I wrote here might be wrong but I'll try to investigate tomorrow. |
Ahh how could I have not noticed the second configure in the logs! Was scratching my head over why the detection of C99 support got a yes (in the first configure) but the compiled code ended up not handling C99. It makes total sense now. The real problem is simply that autoconf does not run the test for the |
Well, isn't it trivial to spot it among 11985 lines 😄? Actually, I found the duplicate configure in the logs by a CTRL+F and... saw that I had two results. |
I used Ctrl-F too, but the browser limits the search to only what's loaded in the memory, when the output of the second configure is hidden because it is loaded on demand by an AJAX call only if I scroll to it. I should've used the "Search Logs" text box in the page to perform the search for the keyword on the server side instead. Thanks again! |
Actually, the trick is to "view raw logs". You'll get the entire logs without buffering (easier to read IMO). |
FTR: #124466 was merged as a temporary workaround so we need to keep the issue opened even though the job looks successful (it's just that we skip it). |
Closing this one in favor of gh-128104 which has a better description and an alternative PR. |
Why not test this at runtime instead of compile time, like in the Python implementation? |
…at the compile time It is needed to support cross-compiling. Remove macros Py_NORMALIZE_CENTURY and Py_STRFTIME_C99_SUPPORT.
We still need to fix a check for Py_NORMALIZE_CENTURY which does not work in cross-compiler. It is only possible at run time. If we require C99 compliant strftime (it is not on Linux for %C), we need to make the following changes:
|
|
>>> time.strftime("%C", (99, 1, 1, 0, 0, 0, 0, 1, 0))
'0' In C99 it should be 2 digits. |
Bug report
Bug description:
This is an issue to track the progress of fixing the JIT. Branches that trigger the embedded Linux tests fail on
test_strftime_y2k
, e.g. https://github.com/python/cpython/actions/runs/10655985897/job/29534232332?pr=123546. As a side-effect this causes users getting notification that their JIT workflow failed.Both the C and F specifiers are failing for this specific test:
A solution is to add this test to the ignored tests or to fix the detection algorithm.
cc @blhsing @serhiy-storchaka
CPython versions tested on:
CPython main branch
Operating systems tested on:
Other
Linked PRs
Related and proposed PR: gh-128106
The text was updated successfully, but these errors were encountered: