aboutsummaryrefslogtreecommitdiff
path: root/bindings/python/tests/cindex/test_tls_kind.py
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/python/tests/cindex/test_tls_kind.py')
-rw-r--r--bindings/python/tests/cindex/test_tls_kind.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/bindings/python/tests/cindex/test_tls_kind.py b/bindings/python/tests/cindex/test_tls_kind.py
new file mode 100644
index 000000000000..fbc3418a64ef
--- /dev/null
+++ b/bindings/python/tests/cindex/test_tls_kind.py
@@ -0,0 +1,49 @@
+from clang.cindex import TLSKind
+from clang.cindex import Cursor
+from clang.cindex import TranslationUnit
+
+from .util import get_cursor
+from .util import get_tu
+
+import unittest
+
+
+class TestTLSKind(unittest.TestCase):
+ def test_tls_kind(self):
+ """Ensure that thread-local storage kinds are available on cursors."""
+
+ tu = get_tu("""
+int tls_none;
+thread_local int tls_dynamic;
+_Thread_local int tls_static;
+""", lang = 'cpp')
+
+ tls_none = get_cursor(tu.cursor, 'tls_none')
+ self.assertEqual(tls_none.tls_kind, TLSKind.NONE)
+
+ tls_dynamic = get_cursor(tu.cursor, 'tls_dynamic')
+ self.assertEqual(tls_dynamic.tls_kind, TLSKind.DYNAMIC)
+
+ tls_static = get_cursor(tu.cursor, 'tls_static')
+ self.assertEqual(tls_static.tls_kind, TLSKind.STATIC)
+
+ # The following case tests '__declspec(thread)'. Since it is a Microsoft
+ # specific extension, specific flags are required for the parser to pick
+ # these up.
+ flags = ['-fms-extensions', '-target', 'x86_64-unknown-windows-win32',
+ '-fms-compatibility-version=18']
+ tu = get_tu("""
+__declspec(thread) int tls_declspec_msvc18;
+""", lang = 'cpp', flags=flags)
+
+ tls_declspec_msvc18 = get_cursor(tu.cursor, 'tls_declspec_msvc18')
+ self.assertEqual(tls_declspec_msvc18.tls_kind, TLSKind.STATIC)
+
+ flags = ['-fms-extensions', '-target', 'x86_64-unknown-windows-win32',
+ '-fms-compatibility-version=19']
+ tu = get_tu("""
+__declspec(thread) int tls_declspec_msvc19;
+""", lang = 'cpp', flags=flags)
+
+ tls_declspec_msvc19 = get_cursor(tu.cursor, 'tls_declspec_msvc19')
+ self.assertEqual(tls_declspec_msvc19.tls_kind, TLSKind.DYNAMIC)