@@ -22,136 +22,44 @@ void ThrustAPIRule::registerMatcher(ast_matchers::MatchFinder &MF) {
2222 // API register
2323 auto functionName = [&]() { return hasAnyName (" on" ); };
2424
25- // THRUST_200302___CUDA_ARCH_LIST___NS is newly imported inline
26- // namespace by thrust library in CUDA header file 12.4.
27- auto thrustFuncNameCuda124 = [&]() {
28- return hasAnyName (" THRUST_200302___CUDA_ARCH_LIST___NS" ,
29- " THRUST_200302___CUDA_ARCH_LIST___NS::detail" ,
30- " THRUST_200302___CUDA_ARCH_LIST___NS::system" );
31- };
32-
33- // THRUST_200400___CUDA_ARCH_LIST___NS is newly imported inline
34- // namespace by thrust library in CUDA header file 12.5.
35- auto thrustFuncNameCuda125 = [&]() {
36- return hasAnyName (" THRUST_200400___CUDA_ARCH_LIST___NS" ,
37- " THRUST_200400___CUDA_ARCH_LIST___NS::detail" ,
38- " THRUST_200400___CUDA_ARCH_LIST___NS::system" );
39- };
40-
41- // THRUST_200500___CUDA_ARCH_LIST___NS is newly imported inline
42- // namespace by thrust library in CUDA header file 12.6.
43- auto thrustFuncNameCuda126 = [&]() {
44- return hasAnyName (" THRUST_200500___CUDA_ARCH_LIST___NS" ,
45- " THRUST_200500___CUDA_ARCH_LIST___NS::detail" ,
46- " THRUST_200500___CUDA_ARCH_LIST___NS::system" );
47- };
48-
49- // THRUST_200700___CUDA_ARCH_LIST___NS is newly imported inline
50- // namespace by thrust library in CUDA header file 12.6.
51- auto thrustFuncNameCuda128 = [&]() {
52- return hasAnyName (" THRUST_200700___CUDA_ARCH_LIST___NS" ,
53- " THRUST_200700___CUDA_ARCH_LIST___NS::detail" ,
54- " THRUST_200700___CUDA_ARCH_LIST___NS::system" );
55- };
56-
57- auto thrustFuncNameCuda129 = [&]() {
58- return hasAnyName (" THRUST_200802_SM___CUDA_ARCH_LIST___NS" ,
59- " THRUST_200802_SM___CUDA_ARCH_LIST___NS::detail" ,
60- " THRUST_200802_SM___CUDA_ARCH_LIST___NS::system" );
61- };
62-
63- auto thrustFuncNameCudaCommon = [&]() {
64- return hasAnyName (" thrust" , " thrust::detail" , " thrust::system" , " __4" );
65- };
66-
6725 int ThrustMajorVersion = ThrustVersion / 100000 ;
6826 int ThrustMinorVersion = ThrustVersion / 100 % 1000 ;
6927
70- if (ThrustMajorVersion == 2 && ThrustMinorVersion == 3 ) {
71- // For CUDA-12.4
72- MF .addMatcher (
73- callExpr (
74- anyOf (callee (functionDecl (anyOf (
75- hasDeclContext (namespaceDecl (thrustFuncNameCuda124 ())),
76- hasDeclContext (namespaceDecl (thrustFuncNameCudaCommon ())),
77- functionName ()))),
78- callee (unresolvedLookupExpr (
79- hasAnyDeclaration (namedDecl (hasDeclContext (namespaceDecl (
80- anyOf (thrustFuncNameCuda124 (),
81- thrustFuncNameCudaCommon ())))))))))
82- .bind (" thrustFuncCall" ),
83- this );
84-
85- } else if (ThrustMajorVersion == 2 && ThrustMinorVersion == 4 ) {
86- // For CUDA-12.5
87- MF .addMatcher (
88- callExpr (
89- anyOf (callee (functionDecl (anyOf (
90- hasDeclContext (namespaceDecl (thrustFuncNameCuda125 ())),
91- hasDeclContext (namespaceDecl (thrustFuncNameCudaCommon ())),
92- functionName ()))),
93- callee (unresolvedLookupExpr (
94- hasAnyDeclaration (namedDecl (hasDeclContext (namespaceDecl (
95- anyOf (thrustFuncNameCuda125 (),
96- thrustFuncNameCudaCommon ())))))))))
97- .bind (" thrustFuncCall" ),
98- this );
99- } else if (ThrustMajorVersion == 2 && ThrustMinorVersion == 5 ) {
100- // For CUDA-12.6
101- MF .addMatcher (
102- callExpr (
103- anyOf (callee (functionDecl (anyOf (
104- hasDeclContext (namespaceDecl (thrustFuncNameCuda126 ())),
105- hasDeclContext (namespaceDecl (thrustFuncNameCudaCommon ())),
106- functionName ()))),
107- callee (unresolvedLookupExpr (
108- hasAnyDeclaration (namedDecl (hasDeclContext (namespaceDecl (
109- anyOf (thrustFuncNameCuda126 (),
110- thrustFuncNameCudaCommon ())))))))))
111- .bind (" thrustFuncCall" ),
112- this );
113- } else if (ThrustMajorVersion == 2 && ThrustMinorVersion == 7 ) {
114- // For CUDA-12.8
115- MF .addMatcher (
116- callExpr (
117- anyOf (callee (functionDecl (anyOf (
118- hasDeclContext (namespaceDecl (thrustFuncNameCuda128 ())),
119- hasDeclContext (namespaceDecl (thrustFuncNameCudaCommon ())),
120- functionName ()))),
121- callee (unresolvedLookupExpr (
122- hasAnyDeclaration (namedDecl (hasDeclContext (namespaceDecl (
123- anyOf (thrustFuncNameCuda128 (),
124- thrustFuncNameCudaCommon ())))))))))
125- .bind (" thrustFuncCall" ),
126- this );
127- } else if (ThrustMajorVersion == 2 && ThrustMinorVersion == 8 ) {
128- // For CUDA-12.9
129- MF .addMatcher (
130- callExpr (
131- anyOf (callee (functionDecl (anyOf (
132- hasDeclContext (namespaceDecl (thrustFuncNameCuda129 ())),
133- hasDeclContext (namespaceDecl (thrustFuncNameCudaCommon ())),
134- functionName ()))),
135- callee (unresolvedLookupExpr (
136- hasAnyDeclaration (namedDecl (hasDeclContext (namespaceDecl (
137- anyOf (thrustFuncNameCuda129 (),
138- thrustFuncNameCudaCommon ())))))))))
139- .bind (" thrustFuncCall" ),
140- this );
141- } else {
142- // For CUDA SDK versions before CUDA-12.4
143- MF .addMatcher (
144- callExpr (
145- anyOf (callee (functionDecl (anyOf (
146- hasDeclContext (namespaceDecl (thrustFuncNameCudaCommon ())),
147-
148- functionName ()))),
149- callee (unresolvedLookupExpr (
150- hasAnyDeclaration (namedDecl (hasDeclContext (
151- namespaceDecl (thrustFuncNameCudaCommon ()))))))))
152- .bind (" thrustFuncCall" ),
153- this );
154- }
28+ auto thrustFuncName = [&]() {
29+ #define COMMON " thrust" , " thrust::detail" , " thrust::system" , " __4"
30+ if (ThrustMajorVersion == 2 && ThrustMinorVersion == 3 )
31+ return hasAnyName (" THRUST_200302___CUDA_ARCH_LIST___NS" ,
32+ " THRUST_200302___CUDA_ARCH_LIST___NS::detail" ,
33+ " THRUST_200302___CUDA_ARCH_LIST___NS::system" , COMMON );
34+ if (ThrustMajorVersion == 2 && ThrustMinorVersion == 4 )
35+ return hasAnyName (" THRUST_200400___CUDA_ARCH_LIST___NS" ,
36+ " THRUST_200400___CUDA_ARCH_LIST___NS::detail" ,
37+ " THRUST_200400___CUDA_ARCH_LIST___NS::system" , COMMON );
38+ if (ThrustMajorVersion == 2 && ThrustMinorVersion == 5 )
39+ return hasAnyName (" THRUST_200500___CUDA_ARCH_LIST___NS" ,
40+ " THRUST_200500___CUDA_ARCH_LIST___NS::detail" ,
41+ " THRUST_200500___CUDA_ARCH_LIST___NS::system" , COMMON );
42+ if (ThrustMajorVersion == 2 && ThrustMinorVersion == 7 )
43+ return hasAnyName (" THRUST_200700___CUDA_ARCH_LIST___NS" ,
44+ " THRUST_200700___CUDA_ARCH_LIST___NS::detail" ,
45+ " THRUST_200700___CUDA_ARCH_LIST___NS::system" , COMMON );
46+ if (ThrustMajorVersion == 2 && ThrustMinorVersion == 8 )
47+ return hasAnyName (" THRUST_200802_SM___CUDA_ARCH_LIST___NS" ,
48+ " THRUST_200802_SM___CUDA_ARCH_LIST___NS::detail" ,
49+ " THRUST_200802_SM___CUDA_ARCH_LIST___NS::system" ,
50+ COMMON );
51+ return hasAnyName (COMMON );
52+ #undef COMMON
53+ };
54+
55+ MF .addMatcher (
56+ callExpr (anyOf (callee (functionDecl (
57+ anyOf (hasDeclContext (namespaceDecl (thrustFuncName ())),
58+ functionName ()))),
59+ callee (unresolvedLookupExpr (hasAnyDeclaration (namedDecl (
60+ hasDeclContext (namespaceDecl (thrustFuncName ()))))))))
61+ .bind (" thrustFuncCall" ),
62+ this );
15563
15664 // THRUST_STATIC_ASSERT macro register
15765 MF .addMatcher (staticAssertDecl (isExpandedFromMacro (" THRUST_STATIC_ASSERT" ))
0 commit comments