| # Verification and Inference for null safety | 
 |  | 
 | load("@rules_cc//cc:cc_library.bzl", "cc_library") | 
 | load("@rules_cc//cc:cc_test.bzl", "cc_test") | 
 |  | 
 | package(default_applicable_licenses = ["//:license"]) | 
 |  | 
 | cc_library( | 
 |     name = "ast_helpers", | 
 |     hdrs = ["ast_helpers.h"], | 
 |     visibility = ["//nullability/inference:__pkg__"], | 
 |     deps = ["@llvm-project//clang:ast"], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "forwarding_functions", | 
 |     srcs = ["forwarding_functions.cc"], | 
 |     hdrs = ["forwarding_functions.h"], | 
 |     visibility = ["//nullability/inference:__pkg__"], | 
 |     deps = [ | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "pointer_nullability_lattice", | 
 |     srcs = ["pointer_nullability_lattice.cc"], | 
 |     hdrs = ["pointer_nullability_lattice.h"], | 
 |     visibility = [ | 
 |         "//nullability/inference:__pkg__", | 
 |         "//nullability/test:__pkg__", | 
 |     ], | 
 |     deps = [ | 
 |         ":type_nullability", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@abseil-cpp//absl/container:flat_hash_map", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "pointer_nullability_lattice_test", | 
 |     srcs = ["pointer_nullability_lattice_test.cc"], | 
 |     deps = [ | 
 |         ":pointer_nullability_lattice", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:testing", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |         "@llvm-project//third-party/unittest:gtest_main", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "pointer_nullability_matchers", | 
 |     srcs = ["pointer_nullability_matchers.cc"], | 
 |     hdrs = ["pointer_nullability_matchers.h"], | 
 |     visibility = ["//visibility:private"], | 
 |     deps = [ | 
 |         ":type_nullability", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "pointer_nullability_matchers_test", | 
 |     srcs = ["pointer_nullability_matchers_test.cc"], | 
 |     deps = [ | 
 |         ":pointer_nullability_matchers", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:testing", | 
 |         "@llvm-project//llvm:Support", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |         "@llvm-project//third-party/unittest:gtest_main", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "pointer_nullability_analysis", | 
 |     srcs = ["pointer_nullability_analysis.cc"], | 
 |     hdrs = ["pointer_nullability_analysis.h"], | 
 |     visibility = [ | 
 |         "//nullability/inference:__pkg__", | 
 |         "//nullability/test:__pkg__", | 
 |     ], | 
 |     deps = [ | 
 |         ":pointer_nullability", | 
 |         ":pointer_nullability_lattice", | 
 |         ":pragma", | 
 |         ":type_nullability", | 
 |         ":type_transferer", | 
 |         ":value_transferer", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "pointer_nullability_analysis_test", | 
 |     srcs = ["pointer_nullability_analysis_test.cc"], | 
 |     deps = [ | 
 |         ":pointer_nullability", | 
 |         ":pointer_nullability_analysis", | 
 |         ":pointer_nullability_lattice", | 
 |         ":pragma", | 
 |         ":type_nullability", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:testing", | 
 |         "@llvm-project//llvm:Support", | 
 |         "@llvm-project//third-party/unittest:gmock", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |         "@llvm-project//third-party/unittest:gtest_main", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "pointer_nullability_diagnosis", | 
 |     srcs = ["pointer_nullability_diagnosis.cc"], | 
 |     hdrs = ["pointer_nullability_diagnosis.h"], | 
 |     visibility = ["//nullability/test:__pkg__"], | 
 |     deps = [ | 
 |         ":forwarding_functions", | 
 |         ":pointer_nullability", | 
 |         ":pointer_nullability_analysis", | 
 |         ":pointer_nullability_lattice", | 
 |         ":pointer_nullability_matchers", | 
 |         ":pragma", | 
 |         ":type_nullability", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:transformer", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "pointer_nullability", | 
 |     srcs = ["pointer_nullability.cc"], | 
 |     hdrs = ["pointer_nullability.h"], | 
 |     visibility = [ | 
 |         "//nullability/inference:__pkg__", | 
 |         "//nullability/test:__pkg__", | 
 |     ], | 
 |     deps = [ | 
 |         ":type_nullability", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "pointer_nullability_test", | 
 |     srcs = ["pointer_nullability_test.cc"], | 
 |     deps = [ | 
 |         ":pointer_nullability", | 
 |         ":type_nullability", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |         "@llvm-project//third-party/unittest:gtest_main", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "type_nullability", | 
 |     srcs = ["type_nullability.cc"], | 
 |     hdrs = ["type_nullability.h"], | 
 |     visibility = [ | 
 |         "//nullability/inference:__pkg__", | 
 |         "//nullability/test:__pkg__", | 
 |     ], | 
 |     deps = [ | 
 |         ":pragma", | 
 |         ":type_and_maybe_loc_visitor", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "type_nullability_test", | 
 |     srcs = ["type_nullability_test.cc"], | 
 |     deps = [ | 
 |         ":pragma", | 
 |         ":type_nullability", | 
 |         "//nullability/test:test_headers", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:frontend", | 
 |         "@llvm-project//clang:lex", | 
 |         "@llvm-project//clang:testing", | 
 |         "@llvm-project//clang:transformer", | 
 |         "@llvm-project//llvm:Support", | 
 |         "@llvm-project//llvm:TestingAnnotations", | 
 |         "@llvm-project//third-party/unittest:gmock", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |         "@llvm-project//third-party/unittest:gtest_main", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "pragma", | 
 |     srcs = ["pragma.cc"], | 
 |     hdrs = ["pragma.h"], | 
 |     visibility = [ | 
 |         "//nullability/inference:__pkg__", | 
 |         "//nullability/test:__pkg__", | 
 |     ], | 
 |     deps = [ | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:lex", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "pragma_test", | 
 |     srcs = ["pragma_test.cc"], | 
 |     deps = [ | 
 |         ":pragma", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:frontend", | 
 |         "@llvm-project//clang:testing", | 
 |         "@llvm-project//llvm:Support", | 
 |         "@llvm-project//third-party/unittest:gmock", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |         "@llvm-project//third-party/unittest:gtest_main", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "proto_matchers", | 
 |     testonly = 1, | 
 |     srcs = ["proto_matchers.cc"], | 
 |     hdrs = ["proto_matchers.h"], | 
 |     visibility = [":__subpackages__"], | 
 |     deps = [ | 
 |         "//third_party/protobuf", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@llvm-project//llvm:Support", | 
 |         "@llvm-project//third-party/unittest:gmock", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "type_and_maybe_loc_visitor", | 
 |     hdrs = ["type_and_maybe_loc_visitor.h"], | 
 |     deps = [ | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:type_nodes_gen", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "macro_arg_capture", | 
 |     hdrs = ["macro_arg_capture.h"], | 
 |     visibility = ["//nullability/inference:__pkg__"], | 
 |     deps = ["@llvm-project//llvm:Support"], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "loc_filter", | 
 |     srcs = ["loc_filter.cc"], | 
 |     hdrs = ["loc_filter.h"], | 
 |     visibility = ["//nullability/inference:__pkg__"], | 
 |     deps = [ | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "annotations", | 
 |     hdrs = ["annotations.h"], | 
 |     visibility = ["//nullability/inference:__pkg__"], | 
 |     deps = ["@llvm-project//llvm:Support"], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "value_transferer", | 
 |     srcs = ["value_transferer.cc"], | 
 |     hdrs = ["value_transferer.h"], | 
 |     deps = [ | 
 |         ":ast_helpers", | 
 |         ":macro_arg_capture", | 
 |         ":pointer_nullability", | 
 |         ":pointer_nullability_lattice", | 
 |         ":pointer_nullability_matchers", | 
 |         ":type_nullability", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_library( | 
 |     name = "type_transferer", | 
 |     srcs = ["type_transferer.cc"], | 
 |     hdrs = ["type_transferer.h"], | 
 |     deps = [ | 
 |         ":pointer_nullability", | 
 |         ":pointer_nullability_lattice", | 
 |         ":type_nullability", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//llvm:Support", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "loc_filter_test", | 
 |     srcs = ["loc_filter_test.cc"], | 
 |     deps = [ | 
 |         ":loc_filter", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:ast_matchers", | 
 |         "@llvm-project//clang:testing", | 
 |         "@llvm-project//third-party/unittest:gtest", | 
 |     ], | 
 | ) | 
 |  | 
 | cc_test( | 
 |     name = "pointer_nullability_analysis_benchmark", | 
 |     timeout = "long", | 
 |     srcs = ["pointer_nullability_analysis_benchmark.cc"], | 
 |     tags = ["benchmark"], | 
 |     deps = [ | 
 |         ":pointer_nullability_analysis", | 
 |         ":pointer_nullability_diagnosis", | 
 |         ":pragma", | 
 |         "@abseil-cpp//absl/base:nullability", | 
 |         "@abseil-cpp//absl/log:check", | 
 |         "@abseil-cpp//absl/strings", | 
 |         "@abseil-cpp//absl/strings:string_view", | 
 |         "@google_benchmark", | 
 |         "@llvm-project//clang:analysis", | 
 |         "@llvm-project//clang:ast", | 
 |         "@llvm-project//clang:basic", | 
 |         "@llvm-project//clang:testing", | 
 |     ], | 
 | ) |