blob: a8b41bb7b10a528d58ab0a296b2d84dcb0d17011 [file] [log] [blame]
Luca Versari99fddff2022-05-25 10:22:32 -07001# C++ lifetime inference and verification through static analysis
2
3package(default_visibility = ["//visibility:public"])
4
5cc_library(
6 name = "analyze",
7 srcs = ["analyze.cc"],
8 hdrs = ["analyze.h"],
9 deps = [
10 ":lifetime_analysis",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070011 ":lifetime_constraints",
Luca Versari99fddff2022-05-25 10:22:32 -070012 ":lifetime_lattice",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070013 ":object",
Luca Versari99fddff2022-05-25 10:22:32 -070014 ":object_repository",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070015 ":object_set",
16 ":points_to_map",
Luca Versari99fddff2022-05-25 10:22:32 -070017 ":template_placeholder_support",
Luca Versari99fddff2022-05-25 10:22:32 -070018 "//lifetime_annotations",
19 "//lifetime_annotations:lifetime",
20 "//lifetime_annotations:lifetime_substitutions",
Luca Versari99fddff2022-05-25 10:22:32 -070021 "//lifetime_annotations:type_lifetimes",
Jing Ludf70bf72023-07-20 03:17:45 -070022 "@absl//absl/strings",
23 "@absl//absl/strings:str_format",
Luca Versari99fddff2022-05-25 10:22:32 -070024 "@llvm-project//clang:analysis",
25 "@llvm-project//clang:ast",
26 "@llvm-project//clang:ast_matchers",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070027 "@llvm-project//clang:basic",
Luca Versari99fddff2022-05-25 10:22:32 -070028 "@llvm-project//clang:index",
29 "@llvm-project//clang:lex",
30 "@llvm-project//llvm:Support",
31 ],
32)
33
34cc_library(
35 name = "template_placeholder_support",
36 srcs = ["template_placeholder_support.cc"],
37 hdrs = ["template_placeholder_support.h"],
38 deps = [
39 "@absl//absl/strings",
Luca Versari99fddff2022-05-25 10:22:32 -070040 "@llvm-project//clang:analysis",
41 "@llvm-project//clang:ast",
42 "@llvm-project//clang:ast_matchers",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070043 "@llvm-project//clang:basic",
Luca Versari99fddff2022-05-25 10:22:32 -070044 "@llvm-project//clang:lex",
45 "@llvm-project//clang:tooling",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070046 "@llvm-project//clang:tooling_refactoring",
Luca Versari99fddff2022-05-25 10:22:32 -070047 "@llvm-project//clang:transformer",
48 "@llvm-project//llvm:Support",
49 ],
50)
51
52cc_library(
53 name = "builtin_lifetimes",
54 srcs = ["builtin_lifetimes.cc"],
55 hdrs = ["builtin_lifetimes.h"],
56 deps = [
Luca Versari99fddff2022-05-25 10:22:32 -070057 "//lifetime_annotations",
58 "//lifetime_annotations:lifetime",
59 "//lifetime_annotations:type_lifetimes",
60 "@llvm-project//clang:ast",
61 "@llvm-project//clang:basic",
62 "@llvm-project//llvm:Support",
63 ],
64)
65
66cc_library(
67 name = "lifetime_analysis",
68 srcs = ["lifetime_analysis.cc"],
69 hdrs = ["lifetime_analysis.h"],
70 deps = [
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070071 ":lifetime_constraints",
Luca Versari99fddff2022-05-25 10:22:32 -070072 ":lifetime_lattice",
73 ":object",
74 ":object_repository",
75 ":object_set",
Luca Versari99fddff2022-05-25 10:22:32 -070076 ":points_to_map",
Luca Versari99fddff2022-05-25 10:22:32 -070077 "//lifetime_annotations:pointee_type",
78 "//lifetime_annotations:type_lifetimes",
79 "@llvm-project//clang:analysis",
80 "@llvm-project//clang:ast",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070081 "@llvm-project//clang:basic",
Luca Versari99fddff2022-05-25 10:22:32 -070082 "@llvm-project//llvm:Support",
83 ],
84)
85
86cc_library(
Luca Versari81222852022-08-05 06:36:10 -070087 name = "lifetime_constraints",
88 srcs = ["lifetime_constraints.cc"],
89 hdrs = ["lifetime_constraints.h"],
90 deps = [
91 "//lifetime_annotations:lifetime",
Luca Versari91a56ff2022-08-22 01:58:33 -070092 "//lifetime_annotations:lifetime_substitutions",
Luca Versari7f2929c2023-01-16 10:15:54 -080093 "//lifetime_annotations:pointee_type",
Luca Versari91a56ff2022-08-22 01:58:33 -070094 "//lifetime_annotations:type_lifetimes",
Luca Versari81222852022-08-05 06:36:10 -070095 "@llvm-project//clang:analysis",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070096 "@llvm-project//clang:ast",
97 "@llvm-project//clang:basic",
Luca Versari81222852022-08-05 06:36:10 -070098 "@llvm-project//llvm:Support",
99 ],
100)
101
102cc_library(
Luca Versari99fddff2022-05-25 10:22:32 -0700103 name = "lifetime_lattice",
104 srcs = ["lifetime_lattice.cc"],
105 hdrs = ["lifetime_lattice.h"],
106 deps = [
Luca Versari81222852022-08-05 06:36:10 -0700107 ":lifetime_constraints",
Luca Versari53a2f582023-01-16 10:09:29 -0800108 ":object_set",
Luca Versari99fddff2022-05-25 10:22:32 -0700109 ":points_to_map",
110 "@llvm-project//clang:analysis",
111 "@llvm-project//llvm:Support",
112 ],
113)
114
115cc_library(
116 name = "object",
117 srcs = ["object.cc"],
118 hdrs = ["object.h"],
119 deps = [
Luca Versari99fddff2022-05-25 10:22:32 -0700120 "//lifetime_annotations:lifetime",
Luca Versari50824882023-01-23 05:51:35 -0800121 "//lifetime_annotations:type_lifetimes",
Jing Ludf70bf72023-07-20 03:17:45 -0700122 "@absl//absl/strings",
123 "@absl//absl/strings:str_format",
Luca Versari99fddff2022-05-25 10:22:32 -0700124 "@llvm-project//clang:ast",
Luca Versari99fddff2022-05-25 10:22:32 -0700125 ],
126)
127
128cc_library(
129 name = "object_set",
130 srcs = ["object_set.cc"],
131 hdrs = ["object_set.h"],
132 deps = [
133 ":object",
134 "@absl//absl/strings",
Luca Versari99fddff2022-05-25 10:22:32 -0700135 "@llvm-project//llvm:Support",
136 ],
137)
138
139cc_test(
140 name = "object_set_test",
141 srcs = ["object_set_test.cc"],
142 deps = [
143 ":object",
144 ":object_set",
Luca Versari99fddff2022-05-25 10:22:32 -0700145 "//lifetime_annotations",
146 "//lifetime_annotations:lifetime",
147 "//lifetime_annotations/test:run_on_code",
Jing Ludf70bf72023-07-20 03:17:45 -0700148 "@com_google_googletest//:gtest_main",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700149 "@llvm-project//clang:ast",
Luca Versari99fddff2022-05-25 10:22:32 -0700150 ],
151)
152
153cc_library(
154 name = "points_to_map",
155 srcs = ["points_to_map.cc"],
156 hdrs = ["points_to_map.h"],
157 deps = [
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700158 ":object",
Luca Versari99fddff2022-05-25 10:22:32 -0700159 ":object_set",
Jing Ludf70bf72023-07-20 03:17:45 -0700160 "//lifetime_annotations:lifetime",
Luca Versari99fddff2022-05-25 10:22:32 -0700161 "@absl//absl/strings",
162 "@absl//absl/strings:str_format",
163 "@llvm-project//clang:ast",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700164 "@llvm-project//clang:basic",
Luca Versari99fddff2022-05-25 10:22:32 -0700165 "@llvm-project//llvm:Support",
166 ],
167)
168
169cc_test(
170 name = "points_to_map_test",
171 srcs = ["points_to_map_test.cc"],
172 deps = [
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700173 ":object",
174 ":object_set",
Luca Versari99fddff2022-05-25 10:22:32 -0700175 ":points_to_map",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700176 "//lifetime_annotations",
Luca Versari99fddff2022-05-25 10:22:32 -0700177 "//lifetime_annotations:lifetime",
178 "//lifetime_annotations/test:run_on_code",
Jing Ludf70bf72023-07-20 03:17:45 -0700179 "@com_google_googletest//:gtest_main",
Luca Versari99fddff2022-05-25 10:22:32 -0700180 "@llvm-project//clang:ast",
181 "@llvm-project//clang:ast_matchers",
182 ],
183)
184
185cc_library(
186 name = "object_repository",
187 srcs = ["object_repository.cc"],
188 hdrs = ["object_repository.h"],
189 deps = [
Luca Versaria12c9d52023-02-23 08:40:48 -0800190 ":builtin_lifetimes",
Luca Versari99fddff2022-05-25 10:22:32 -0700191 ":object",
192 ":object_set",
193 ":points_to_map",
Luca Versari99fddff2022-05-25 10:22:32 -0700194 "//lifetime_annotations:lifetime",
195 "//lifetime_annotations:pointee_type",
196 "//lifetime_annotations:type_lifetimes",
Jing Ludf70bf72023-07-20 03:17:45 -0700197 "@absl//absl/strings",
Luca Versari99fddff2022-05-25 10:22:32 -0700198 "@llvm-project//clang:ast",
199 "@llvm-project//clang:basic",
200 "@llvm-project//llvm:Support",
201 ],
202)
203
204cc_library(
Luca Versari99fddff2022-05-25 10:22:32 -0700205 name = "pointer_compatibility",
206 srcs = ["pointer_compatibility.cc"],
207 hdrs = ["pointer_compatibility.h"],
208 deps = [
209 "//lifetime_annotations:pointee_type",
210 "@llvm-project//clang:ast",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700211 "@llvm-project//llvm:Support",
Luca Versari99fddff2022-05-25 10:22:32 -0700212 ],
213)
214
215cc_test(
216 name = "pointer_compatibility_test",
217 srcs = ["pointer_compatibility_test.cc"],
218 deps = [
219 ":pointer_compatibility",
Luca Versari99fddff2022-05-25 10:22:32 -0700220 "//lifetime_annotations",
221 "//lifetime_annotations/test:run_on_code",
Jing Ludf70bf72023-07-20 03:17:45 -0700222 "@com_google_googletest//:gtest_main",
Luca Versari99fddff2022-05-25 10:22:32 -0700223 "@llvm-project//clang:ast",
224 "@llvm-project//clang:ast_matchers",
Dmitri Gribenkoa087d232023-07-10 08:03:46 -0700225 "@llvm-project//llvm:Support",
Luca Versari99fddff2022-05-25 10:22:32 -0700226 ],
227)