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