@@ -25,6 +25,10 @@ class tester_t(parser_test_case.parser_test_case_t):
25
25
def __init__ (self , * args ):
26
26
parser_test_case .parser_test_case_t .__init__ (self , * args )
27
27
self .__code = os .linesep .join (['struct a{};' ])
28
+ self .known_typedefs = [
29
+ "__int128_t" , "__uint128_t" , "__builtin_va_list" ]
30
+ self .known_typedefs_llvm39 = \
31
+ self .known_typedefs + ["__builtin_ms_va_list" ]
28
32
29
33
def test_keep_va_list_tag (self ):
30
34
@@ -50,8 +54,20 @@ def test_keep_va_list_tag(self):
50
54
self .assertTrue ("a" in [class_ .name for class_ in classes ])
51
55
self .assertTrue (len (classes ) == 2 )
52
56
53
- self .assertTrue (tag in [ty .name for ty in typedefs ])
54
57
self .assertTrue (len (typedefs ) == 4 )
58
+ if tag not in [ty .name for ty in typedefs ]:
59
+ # This is for llvm 3.9. The class __va_list_tag struct is still
60
+ # there but the typedef is gone
61
+ for t in self .known_typedefs_llvm39 :
62
+ self .assertTrue (t in [ty .name for ty in typedefs ])
63
+ self .assertTrue (
64
+ "__NSConstantString_tag" in
65
+ [class_ .name for class_ in classes ])
66
+ self .assertTrue (
67
+ "__NSConstantString" in [ty .name for ty in typedefs ])
68
+ else :
69
+ for t in self .known_typedefs :
70
+ self .assertTrue (t in [ty .name for ty in typedefs ])
55
71
56
72
self .assertTrue (
57
73
tag in [var .decl_string .split ("::" )[1 ] for var in variables ])
@@ -82,7 +98,19 @@ def test_remove_va_list_tag(self):
82
98
self .assertTrue (len (classes ) == 1 )
83
99
84
100
self .assertFalse (tag in [ty .name for ty in typedefs ])
85
- self .assertTrue (len (typedefs ) == 3 )
101
+ self .assertTrue (len (typedefs ) == 3 or len (typedefs ) == 4 )
102
+ if len (typedefs ) == 4 :
103
+ # This is for llvm 3.9
104
+ for t in self .known_typedefs_llvm39 :
105
+ self .assertTrue (t in [ty .name for ty in typedefs ])
106
+ self .assertFalse (
107
+ "__NSConstantString_tag"
108
+ in [class_ .name for class_ in classes ])
109
+ self .assertFalse (
110
+ "__NSConstantString" in [ty .name for ty in typedefs ])
111
+ else :
112
+ for t in self .known_typedefs :
113
+ self .assertTrue (t in [ty .name for ty in typedefs ])
86
114
87
115
self .assertFalse (
88
116
tag in [var .decl_string .split ("::" )[1 ] for var in variables ])
0 commit comments