Vladimir MARANGOZOV <Vladimir.Marangozov@inrialpes.fr>:
This patch fixes an optimisation mystery in _PyUnicodeNew causing segfaults
on AIX when the interpreter is compiled with -O.
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index bfc59dd..e6d2a1a 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -213,9 +213,8 @@
/* Unicode freelist & memory allocation */
if (unicode_freelist) {
unicode = unicode_freelist;
- unicode_freelist = *(PyUnicodeObject **)unicode_freelist;
+ unicode_freelist = *(PyUnicodeObject **)unicode;
unicode_freelist_size--;
- PyObject_INIT(unicode, &PyUnicode_Type);
if (unicode->str) {
/* Keep-Alive optimization: we only upsize the buffer,
never downsize it. */
@@ -225,8 +224,10 @@
goto onError;
}
}
- else
+ else {
unicode->str = PyMem_NEW(Py_UNICODE, length + 1);
+ }
+ PyObject_INIT(unicode, &PyUnicode_Type);
}
else {
unicode = PyObject_NEW(PyUnicodeObject, &PyUnicode_Type);