summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/python/gcc-8-2.7.14.patch35
-rw-r--r--var/spack/repos/builtin/packages/python/package.py4
2 files changed, 39 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/python/gcc-8-2.7.14.patch b/var/spack/repos/builtin/packages/python/gcc-8-2.7.14.patch
new file mode 100644
index 0000000000..72c879cdea
--- /dev/null
+++ b/var/spack/repos/builtin/packages/python/gcc-8-2.7.14.patch
@@ -0,0 +1,35 @@
+diff --git a/Include/objimpl.h b/Include/objimpl.h
+index 5f2868332955..cbf6bc3f8763 100644
+--- a/Include/objimpl.h
++++ b/Include/objimpl.h
+@@ -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;
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index 5b8c7e94e3..ac42ffa547 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -118,6 +118,10 @@ class Python(AutotoolsPackage):
patch('cray-rpath-2.3.patch', when="@2.3:3.0.1 platform=cray")
patch('cray-rpath-3.1.patch', when="@3.1:3.99 platform=cray")
+ # Fixes an alignment problem with more aggressive optimization in gcc8
+ # https://github.com/python/cpython/commit/0b91f8a668201fc58fa732b8acc496caedfdbae0
+ patch('gcc-8-2.7.14.patch', when="@2.7.14 %gcc@8:")
+
# For more information refer to this bug report:
# https://bugs.python.org/issue29712
conflicts(