Merge 2.7.15 release branch

This commit is contained in:
Benjamin Peterson 2018-04-29 12:24:24 -07:00
commit 0b3800d82a
2 changed files with 19 additions and 1 deletions

View File

@ -248,6 +248,20 @@ PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
/* for source compatibility with 2.2 */
#define _PyObject_GC_Del PyObject_GC_Del
/*
* Former over-aligned definition of PyGC_Head, used to compute the size of the
* padding for the new version below.
*/
union _gc_head;
union _gc_head_old {
struct {
union _gc_head_old *gc_next;
union _gc_head_old *gc_prev;
Py_ssize_t gc_refs;
} gc;
long double dummy;
};
/* GC information is stored BEFORE the object structure. */
typedef union _gc_head {
struct {
@ -255,7 +269,8 @@ typedef union _gc_head {
union _gc_head *gc_prev;
Py_ssize_t gc_refs;
} gc;
long double dummy; /* force worst-case alignment */
double dummy; /* Force at least 8-byte alignment. */
char dummy_padding[sizeof(union _gc_head_old)];
} PyGC_Head;
extern PyGC_Head *_PyGC_generation0;

View File

@ -0,0 +1,3 @@
Tweak the definition of PyGC_Head, so compilers do not believe it is always
16-byte aligned on x86. This prevents crashes with more aggressive
optimizations present in GCC 8.