xref: /openbsd-src/gnu/llvm/clang/bindings/python/tests/cindex/test_tls_kind.py (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
1*e5dd7070Spatrickimport os
2*e5dd7070Spatrickfrom clang.cindex import Config
3*e5dd7070Spatrickif 'CLANG_LIBRARY_PATH' in os.environ:
4*e5dd7070Spatrick    Config.set_library_path(os.environ['CLANG_LIBRARY_PATH'])
5*e5dd7070Spatrick
6*e5dd7070Spatrickfrom clang.cindex import TLSKind
7*e5dd7070Spatrickfrom clang.cindex import Cursor
8*e5dd7070Spatrickfrom clang.cindex import TranslationUnit
9*e5dd7070Spatrick
10*e5dd7070Spatrickfrom .util import get_cursor
11*e5dd7070Spatrickfrom .util import get_tu
12*e5dd7070Spatrick
13*e5dd7070Spatrickimport unittest
14*e5dd7070Spatrick
15*e5dd7070Spatrick
16*e5dd7070Spatrickclass TestTLSKind(unittest.TestCase):
17*e5dd7070Spatrick    def test_tls_kind(self):
18*e5dd7070Spatrick        """Ensure that thread-local storage kinds are available on cursors."""
19*e5dd7070Spatrick
20*e5dd7070Spatrick        tu = get_tu("""
21*e5dd7070Spatrickint tls_none;
22*e5dd7070Spatrickthread_local int tls_dynamic;
23*e5dd7070Spatrick_Thread_local int tls_static;
24*e5dd7070Spatrick""", lang = 'cpp')
25*e5dd7070Spatrick
26*e5dd7070Spatrick        tls_none = get_cursor(tu.cursor, 'tls_none')
27*e5dd7070Spatrick        self.assertEqual(tls_none.tls_kind, TLSKind.NONE)
28*e5dd7070Spatrick
29*e5dd7070Spatrick        tls_dynamic = get_cursor(tu.cursor, 'tls_dynamic')
30*e5dd7070Spatrick        self.assertEqual(tls_dynamic.tls_kind, TLSKind.DYNAMIC)
31*e5dd7070Spatrick
32*e5dd7070Spatrick        tls_static = get_cursor(tu.cursor, 'tls_static')
33*e5dd7070Spatrick        self.assertEqual(tls_static.tls_kind, TLSKind.STATIC)
34*e5dd7070Spatrick
35*e5dd7070Spatrick        # The following case tests '__declspec(thread)'.  Since it is a Microsoft
36*e5dd7070Spatrick        # specific extension, specific flags are required for the parser to pick
37*e5dd7070Spatrick        # these up.
38*e5dd7070Spatrick        flags = ['-fms-extensions', '-target', 'x86_64-unknown-windows-win32',
39*e5dd7070Spatrick                 '-fms-compatibility-version=18']
40*e5dd7070Spatrick        tu = get_tu("""
41*e5dd7070Spatrick__declspec(thread) int tls_declspec_msvc18;
42*e5dd7070Spatrick""", lang = 'cpp', flags=flags)
43*e5dd7070Spatrick
44*e5dd7070Spatrick        tls_declspec_msvc18 = get_cursor(tu.cursor, 'tls_declspec_msvc18')
45*e5dd7070Spatrick        self.assertEqual(tls_declspec_msvc18.tls_kind, TLSKind.STATIC)
46*e5dd7070Spatrick
47*e5dd7070Spatrick        flags = ['-fms-extensions', '-target', 'x86_64-unknown-windows-win32',
48*e5dd7070Spatrick                 '-fms-compatibility-version=19']
49*e5dd7070Spatrick        tu = get_tu("""
50*e5dd7070Spatrick__declspec(thread) int tls_declspec_msvc19;
51*e5dd7070Spatrick""", lang = 'cpp', flags=flags)
52*e5dd7070Spatrick
53*e5dd7070Spatrick        tls_declspec_msvc19 = get_cursor(tu.cursor, 'tls_declspec_msvc19')
54*e5dd7070Spatrick        self.assertEqual(tls_declspec_msvc19.tls_kind, TLSKind.DYNAMIC)
55