[Mlir-commits] [mlir] 2b842e5 - [mlir][python] fix PyThreadState_GetFrame again (#153333)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Tue Aug 12 19:29:27 PDT 2025


Author: Maksim Levental
Date: 2025-08-12T21:29:23-05:00
New Revision: 2b842e56000af9ba774fb96a8bb3b89980296bb0

URL: https://github.com/llvm/llvm-project/commit/2b842e56000af9ba774fb96a8bb3b89980296bb0
DIFF: https://github.com/llvm/llvm-project/commit/2b842e56000af9ba774fb96a8bb3b89980296bb0.diff

LOG: [mlir][python] fix PyThreadState_GetFrame again (#153333)

add more APIs missing from 3.8 (fix rocm builder)

Added: 
    

Modified: 
    mlir/lib/Bindings/Python/IRCore.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Bindings/Python/IRCore.cpp b/mlir/lib/Bindings/Python/IRCore.cpp
index 03b04ffbe9749..390cdc5429beb 100644
--- a/mlir/lib/Bindings/Python/IRCore.cpp
+++ b/mlir/lib/Bindings/Python/IRCore.cpp
@@ -2786,13 +2786,71 @@ class PyOpAttributeMap {
   PyOperationRef operation;
 };
 
-// bpo-40429 added PyThreadState_GetFrame() to Python 3.9.0b1
+// see
+// https://raw.githubusercontent.com/python/pythoncapi_compat/master/pythoncapi_compat.h
+
+#ifndef _Py_CAST
+#define _Py_CAST(type, expr) ((type)(expr))
+#endif
+
+// Static inline functions should use _Py_NULL rather than using directly NULL
+// to prevent C++ compiler warnings. On C23 and newer and on C++11 and newer,
+// _Py_NULL is defined as nullptr.
+#ifndef _Py_NULL
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ > 201710L) ||               \
+    (defined(__cplusplus) && __cplusplus >= 201103)
+#define _Py_NULL nullptr
+#else
+#define _Py_NULL NULL
+#endif
+#endif
+
+// Python 3.10.0a3
+#if PY_VERSION_HEX < 0x030A00A3
+
+// bpo-42262 added Py_XNewRef()
+#if !defined(Py_XNewRef)
+PyObject *_Py_XNewRef(PyObject *obj) {
+  Py_XINCREF(obj);
+  return obj;
+}
+#define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
+#endif
+
+// bpo-42262 added Py_NewRef()
+#if !defined(Py_NewRef)
+PyObject *_Py_NewRef(PyObject *obj) {
+  Py_INCREF(obj);
+  return obj;
+}
+#define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
+#endif
+
+#endif // Python 3.10.0a3
+
+// Python 3.9.0b1
 #if PY_VERSION_HEX < 0x030900B1 && !defined(PYPY_VERSION)
-static inline PyFrameObject *PyThreadState_GetFrame(PyThreadState *tstate) {
-  assert(tstate != _Py_NULL);
+
+// bpo-40429 added PyThreadState_GetFrame()
+PyFrameObject *PyThreadState_GetFrame(PyThreadState *tstate) {
+  assert(tstate != _Py_NULL && "expected tstate != _Py_NULL");
   return _Py_CAST(PyFrameObject *, Py_XNewRef(tstate->frame));
 }
-#endif
+
+// bpo-40421 added PyFrame_GetBack()
+PyFrameObject *PyFrame_GetBack(PyFrameObject *frame) {
+  assert(frame != _Py_NULL && "expected frame != _Py_NULL");
+  return _Py_CAST(PyFrameObject *, Py_XNewRef(frame->f_back));
+}
+
+// bpo-40421 added PyFrame_GetCode()
+PyCodeObject *PyFrame_GetCode(PyFrameObject *frame) {
+  assert(frame != _Py_NULL && "expected frame != _Py_NULL");
+  assert(frame->f_code != _Py_NULL && "expected frame->f_code != _Py_NULL");
+  return _Py_CAST(PyCodeObject *, Py_NewRef(frame->f_code));
+}
+
+#endif // Python 3.9.0b1
 
 MlirLocation tracebackToLocation(MlirContext ctx) {
   size_t framesLimit =
@@ -2820,7 +2878,8 @@ MlirLocation tracebackToLocation(MlirContext ctx) {
     if (!PyGlobals::get().getTracebackLoc().isUserTracebackFilename(fileName))
       continue;
 
-#if PY_VERSION_HEX < 0x030b00f0
+    // co_qualname and PyCode_Addr2Location added in py3.11
+#if PY_VERSION_HEX < 0x030B00F0
     std::string name =
         nb::cast<std::string>(nb::borrow<nb::str>(code->co_name));
     llvm::StringRef funcName(name);
@@ -2828,7 +2887,6 @@ MlirLocation tracebackToLocation(MlirContext ctx) {
     MlirLocation loc =
         mlirLocationFileLineColGet(ctx, wrap(fileName), startLine, 0);
 #else
-    // co_qualname and PyCode_Addr2Location added in py3.11
     std::string name =
         nb::cast<std::string>(nb::borrow<nb::str>(code->co_qualname));
     llvm::StringRef funcName(name);


        


More information about the Mlir-commits mailing list