Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
Initialize PyDateTime_IsoCalendarDateType.tp_base at run-time to avoid
errors on some compilers.
13 changes: 10 additions & 3 deletions Modules/_datetimemodule.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -3325,7 +3325,7 @@ static PyTypeObject PyDateTime_IsoCalendarDateType ={
.tp_doc = iso_calendar_date__doc__,
.tp_methods = iso_calendar_date_methods,
.tp_getset = iso_calendar_date_getset,
.tp_base = &PyTuple_Type,
// .tp_base = &PyTuple_Type, // filled in PyInit__datetime
.tp_new = iso_calendar_date_new,
};

Expand DownExpand Up@@ -4079,7 +4079,7 @@ static PyTypeObject PyDateTime_TimeZoneType ={
timezone_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
&PyDateTime_TZInfoType, /* tp_base */
0, /* tp_base; filled in PyInit__datetime */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
Expand DownExpand Up@@ -6458,7 +6458,8 @@ static PyTypeObject PyDateTime_DateTimeType ={
datetime_methods, /* tp_methods */
0, /* tp_members */
datetime_getset, /* tp_getset */
&PyDateTime_DateType, /* tp_base */
0, /* tp_base; filled in
PyInit__datetime */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
Expand DownExpand Up@@ -6524,6 +6525,12 @@ PyInit__datetime(void)
if (m == NULL)
return NULL;

// `&...` is not a constant expression according to a strict reading
// of C standards. Fill tp_base at run-time rather than statically.
// See https://bugs.python.org/issue40777
PyDateTime_IsoCalendarDateType.tp_base = &PyTuple_Type;
PyDateTime_TimeZoneType.tp_base = &PyDateTime_TZInfoType;
PyDateTime_DateTimeType.tp_base = &PyDateTime_DateType;

PyTypeObject *types[] ={
&PyDateTime_DateType,
Expand Down