Patch #1115086: support PY_LONGLONG in structmember.
diff --git a/Include/structmember.h b/Include/structmember.h
index 015ca19..96d2331 100644
--- a/Include/structmember.h
+++ b/Include/structmember.h
@@ -65,6 +65,10 @@
 #define T_OBJECT_EX	16	/* Like T_OBJECT, but raises AttributeError
 				   when the value is NULL, instead of
 				   converting to None. */
+#ifdef HAVE_LONG_LONG
+#define T_LONGLONG      17  
+#define T_ULONGLONG      18
+#endif /* HAVE_LONG_LONG */
 
 /* Flags */
 #define READONLY	1
diff --git a/Misc/NEWS b/Misc/NEWS
index 5bf2e51..c6033de 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@
 Core and builtins
 -----------------
 
+- Patch #1115086: Support PY_LONGLONG in structmember.
+
 - Bug #1155938: new style classes did not check that __init__() was
   returning None.
 
diff --git a/Python/structmember.c b/Python/structmember.c
index bbaaca8..1574c95 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -118,6 +118,14 @@
 			PyErr_SetString(PyExc_AttributeError, l->name);
 		Py_XINCREF(v);
 		break;
+#ifdef HAVE_LONG_LONG
+	case T_LONGLONG:
+		v = PyLong_FromLongLong(*(PY_LONG_LONG *)addr);
+		break;
+	case T_ULONGLONG:
+		v = PyLong_FromUnsignedLongLong(*(unsigned PY_LONG_LONG *)addr);
+		break;
+#endif /* HAVE_LONG_LONG */
 	default:
 		PyErr_SetString(PyExc_SystemError, "bad memberdescr type");
 		v = NULL;
@@ -246,6 +254,30 @@
 			return -1;
 		}
 		break;
+#ifdef HAVE_LONG_LONG
+	case T_LONGLONG:
+		if (!PyLong_Check(v)) {
+			PyErr_BadArgument();
+			return -1;
+		} else {
+                        *(PY_LONG_LONG*)addr = PyLong_AsLongLong(v);
+                        if ((*addr == -1) && PyErr_Occurred()) {
+                                return -1;
+                        }
+                }
+                break;
+	case T_ULONGLONG:
+                if (!PyLong_Check(v)) {
+                        PyErr_BadArgument();
+                        return -1;
+                } else {
+                        *(unsigned PY_LONG_LONG*)addr = PyLong_AsUnsignedLongLong(v);
+                        if ((*addr == -1) && PyErr_Occurred()) {
+                                return -1;
+                        }
+                }
+                break;
+#endif /* HAVE_LONG_LONG */
 	default:
 		PyErr_Format(PyExc_SystemError,
 			     "bad memberdescr type for %s", l->name);