[clang] [libclang/python] Add isFunctionInlined support (PR #162882)

Thomas Applencourt via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 30 11:42:33 PDT 2025


https://github.com/TApplencourt updated https://github.com/llvm/llvm-project/pull/162882

>From 674bdfb5d0160bf637cce069fdf03c465c81b287 Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Fri, 10 Oct 2025 16:39:51 +0000
Subject: [PATCH 01/10] Add isFunctionInlined support in Python Binding

---
 clang/bindings/python/clang/cindex.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 80140d2787608..015667b4decd9 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -2362,6 +2362,13 @@ def get_bitfield_width(self) -> int:
         """
         return conf.lib.clang_getFieldDeclBitWidth(self)  # type: ignore [no-any-return]
 
+    def is_function_inlined(self) -> bool:
+        """
+        Check if the function is inlined
+        """
+        assert self.kind == TypeKind.FUNCTIONPROTO
+        return bool(conf.lib.clang_Cursor_isFunctionInlined(self))  # type: ignore [no-any-return]
+
     @cursor_null_guard
     def has_attrs(self) -> bool:
         """
@@ -4308,6 +4315,7 @@ def set_property(self, property, value):
     ("clang_Cursor_isAnonymous", [Cursor], bool),
     ("clang_Cursor_isAnonymousRecordDecl", [Cursor], bool),
     ("clang_Cursor_isBitField", [Cursor], bool),
+    ("clang_Cursor_isFunctionInlined", [Cursor], c_uint),
     ("clang_Location_isInSystemHeader", [SourceLocation], bool),
     ("clang_PrintingPolicy_dispose", [PrintingPolicy]),
     ("clang_PrintingPolicy_getProperty", [PrintingPolicy, c_int], c_uint),

>From 7a69e7d38c450c6cb8049f9aeb9e9c52be8e1e1e Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Fri, 10 Oct 2025 16:39:51 +0000
Subject: [PATCH 02/10] Add isFunctionInlined support in Python Binding

---
 clang/bindings/python/clang/cindex.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 015667b4decd9..0c08e3faeec2c 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -2362,6 +2362,7 @@ def get_bitfield_width(self) -> int:
         """
         return conf.lib.clang_getFieldDeclBitWidth(self)  # type: ignore [no-any-return]
 
+    @cursor_null_guard
     def is_function_inlined(self) -> bool:
         """
         Check if the function is inlined

>From 9efe91b5421c809a5f877491ff5eb5a2ee95daf9 Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Tue, 14 Oct 2025 15:26:11 +0000
Subject: [PATCH 03/10] Use bool implace of c_int

---
 clang/bindings/python/clang/cindex.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 0c08e3faeec2c..f1295f606b030 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -2368,7 +2368,7 @@ def is_function_inlined(self) -> bool:
         Check if the function is inlined
         """
         assert self.kind == TypeKind.FUNCTIONPROTO
-        return bool(conf.lib.clang_Cursor_isFunctionInlined(self))  # type: ignore [no-any-return]
+        return conf.lib.clang_Cursor_isFunctionInlined(self)  # type: ignore [no-any-return]
 
     @cursor_null_guard
     def has_attrs(self) -> bool:
@@ -4316,7 +4316,7 @@ def set_property(self, property, value):
     ("clang_Cursor_isAnonymous", [Cursor], bool),
     ("clang_Cursor_isAnonymousRecordDecl", [Cursor], bool),
     ("clang_Cursor_isBitField", [Cursor], bool),
-    ("clang_Cursor_isFunctionInlined", [Cursor], c_uint),
+    ("clang_Cursor_isFunctionInlined", [Cursor], bool),
     ("clang_Location_isInSystemHeader", [SourceLocation], bool),
     ("clang_PrintingPolicy_dispose", [PrintingPolicy]),
     ("clang_PrintingPolicy_getProperty", [PrintingPolicy, c_int], c_uint),

>From 8c14af8d1027a43d0e36ff6fbde5322da036c214 Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Tue, 14 Oct 2025 15:26:49 +0000
Subject: [PATCH 04/10] Docstrings should end with a period

---
 clang/bindings/python/clang/cindex.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index f1295f606b030..4cf14fd8899f8 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -2365,7 +2365,7 @@ def get_bitfield_width(self) -> int:
     @cursor_null_guard
     def is_function_inlined(self) -> bool:
         """
-        Check if the function is inlined
+        Check if the function is inlined.
         """
         assert self.kind == TypeKind.FUNCTIONPROTO
         return conf.lib.clang_Cursor_isFunctionInlined(self)  # type: ignore [no-any-return]

>From 6edd33cab590e4f712c0d43f5363670b276244f8 Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Tue, 14 Oct 2025 15:30:58 +0000
Subject: [PATCH 05/10] add ReleaseNotes

---
 clang/docs/ReleaseNotes.rst | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 99aa545831240..037c9549d1aab 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -615,6 +615,7 @@ Sanitizers
 
 Python Binding Changes
 ----------------------
+- Exposed ``clang_Cursor_is_function_inlined``.
 - Exposed ``clang_getCursorLanguage`` via ``Cursor.language``.
 - Add all missing ``CursorKind``s, ``TypeKind``s and
   ``ExceptionSpecificationKind``s from ``Index.h``

>From 484b385834187c482d880724e077c1a9ccbc0c7b Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Tue, 14 Oct 2025 15:38:20 +0000
Subject: [PATCH 06/10] Add test for is_function_inlined

---
 clang/bindings/python/tests/cindex/test_cursor.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/clang/bindings/python/tests/cindex/test_cursor.py b/clang/bindings/python/tests/cindex/test_cursor.py
index eb0d1d50601a6..7f6230c9d1a36 100644
--- a/clang/bindings/python/tests/cindex/test_cursor.py
+++ b/clang/bindings/python/tests/cindex/test_cursor.py
@@ -784,6 +784,11 @@ def test_storage_class(self):
         cursor = get_cursor(tu, "reg")
         self.assertEqual(cursor.storage_class, StorageClass.REGISTER)
 
+    def test_function_inlined(self):
+        tu = get_tu("inline void foo(void);")
+        cursor = get_cursor(tu, "foo")
+        self.assertEqual(cursor.is_function_inlined(), True)
+
     def test_availability(self):
         tu = get_tu("class A { A(A const&) = delete; };", lang="cpp")
 

>From a5d081ce33e6c0929ddd7fe710512871b6c5ce72 Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Tue, 21 Oct 2025 20:26:27 +0000
Subject: [PATCH 07/10] Remove assert

---
 clang/bindings/python/clang/cindex.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 4cf14fd8899f8..7c0b26e311f94 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -2367,7 +2367,6 @@ def is_function_inlined(self) -> bool:
         """
         Check if the function is inlined.
         """
-        assert self.kind == TypeKind.FUNCTIONPROTO
         return conf.lib.clang_Cursor_isFunctionInlined(self)  # type: ignore [no-any-return]
 
     @cursor_null_guard

>From 0d1268ce0525db85dab7267b5921857413ce7d68 Mon Sep 17 00:00:00 2001
From: tapplencourt <tapplencourt at anl.gov>
Date: Tue, 21 Oct 2025 20:33:33 +0000
Subject: [PATCH 08/10] Add more tests

---
 clang/bindings/python/tests/cindex/test_cursor.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/clang/bindings/python/tests/cindex/test_cursor.py b/clang/bindings/python/tests/cindex/test_cursor.py
index 7f6230c9d1a36..7cb616a7ef148 100644
--- a/clang/bindings/python/tests/cindex/test_cursor.py
+++ b/clang/bindings/python/tests/cindex/test_cursor.py
@@ -785,9 +785,19 @@ def test_storage_class(self):
         self.assertEqual(cursor.storage_class, StorageClass.REGISTER)
 
     def test_function_inlined(self):
-        tu = get_tu("inline void foo(void);")
-        cursor = get_cursor(tu, "foo")
+        tu = get_tu(
+            """
+inline void f_inline(void);
+void f_noninline(void);
+int d_noninline;
+"""
+        )
+        cursor = get_cursor(tu, "f_inline")
         self.assertEqual(cursor.is_function_inlined(), True)
+        cursor = get_cursor(tu, "f_noninline")
+        self.assertEqual(cursor.is_function_inlined(), False)
+        cursor = get_cursor(tu, "d_noninline")
+        self.assertEqual(cursor.is_function_inlined(), False)
 
     def test_availability(self):
         tu = get_tu("class A { A(A const&) = delete; };", lang="cpp")

>From 433df89e286c8c05b4c5efe440a60d25b9fce845 Mon Sep 17 00:00:00 2001
From: Thomas Applencourt <tapplencourt at anl.gov>
Date: Wed, 22 Oct 2025 17:27:52 -0500
Subject: [PATCH 09/10] Update clang/docs/ReleaseNotes.rst

Co-authored-by: Vlad Serebrennikov <serebrennikov.vladislav at gmail.com>
---
 clang/docs/ReleaseNotes.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 037c9549d1aab..4479077148226 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -615,7 +615,7 @@ Sanitizers
 
 Python Binding Changes
 ----------------------
-- Exposed ``clang_Cursor_is_function_inlined``.
+- Exposed ``clang_Cursor_isFunctionInlined``.
 - Exposed ``clang_getCursorLanguage`` via ``Cursor.language``.
 - Add all missing ``CursorKind``s, ``TypeKind``s and
   ``ExceptionSpecificationKind``s from ``Index.h``

>From cfa988ee0f4cd1a037aaf59a8562d52a8c837f8d Mon Sep 17 00:00:00 2001
From: Thomas Applencourt <tapplencourt at anl.gov>
Date: Thu, 30 Oct 2025 13:42:21 -0500
Subject: [PATCH 10/10] Update clang/bindings/python/clang/cindex.py

Co-authored-by: Vlad Serebrennikov <serebrennikov.vladislav at gmail.com>
---
 clang/bindings/python/clang/cindex.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 7c0b26e311f94..ba2a0dbfcab7b 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -4315,7 +4315,7 @@ def set_property(self, property, value):
     ("clang_Cursor_isAnonymous", [Cursor], bool),
     ("clang_Cursor_isAnonymousRecordDecl", [Cursor], bool),
     ("clang_Cursor_isBitField", [Cursor], bool),
-    ("clang_Cursor_isFunctionInlined", [Cursor], bool),
+    ("clang_Cursor_isFunctionInlined", [Cursor], c_uint),
     ("clang_Location_isInSystemHeader", [SourceLocation], bool),
     ("clang_PrintingPolicy_dispose", [PrintingPolicy]),
     ("clang_PrintingPolicy_getProperty", [PrintingPolicy, c_int], c_uint),



More information about the cfe-commits mailing list