| """Copyright (C) 2022 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| """ |
| |
| load("@bazel_skylib//lib:paths.bzl", "paths") |
| load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") |
| load( |
| "//build/bazel/rules/test_common:flags.bzl", |
| "action_flags_absent_for_mnemonic_test", |
| "action_flags_present_only_for_mnemonic_test", |
| ) |
| load( |
| ":cc_toolchain_constants.bzl", |
| "libclang_ubsan_minimal_rt_prebuilt_map", |
| ) |
| load( |
| ":cc_toolchain_features.bzl", |
| "int_overflow_ignorelist_filename", |
| "int_overflow_ignorelist_path", |
| ) |
| |
| compile_action_mnemonic = "CppCompile" |
| link_action_mnemonic = "CppLink" |
| ubsan_prefix_format = "-fsanitize=%s" |
| |
| def _ubsan_sanitizer_test( |
| name, |
| target_under_test, |
| expected_sanitizers): |
| action_flags_present_only_for_mnemonic_test( |
| name = name, |
| target_under_test = target_under_test, |
| mnemonics = [compile_action_mnemonic, link_action_mnemonic], |
| expected_flags = [ |
| ubsan_prefix_format % sanitizer |
| for sanitizer in expected_sanitizers |
| ], |
| ) |
| |
| # Include these different file types to make sure that all actions types are |
| # triggered |
| test_srcs = [ |
| "foo.cpp", |
| "bar.c", |
| "baz.s", |
| "blah.S", |
| ] |
| |
| def _test_ubsan_integer_overflow_feature(): |
| name = "ubsan_integer_overflow" |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_integer_overflow"], |
| tags = ["manual"], |
| ) |
| |
| int_overflow_test_name = name + "_test" |
| test_names = [int_overflow_test_name] |
| _ubsan_sanitizer_test( |
| name = int_overflow_test_name, |
| target_under_test = name, |
| expected_sanitizers = [ |
| "signed-integer-overflow", |
| "unsigned-integer-overflow", |
| ], |
| ) |
| |
| ignorelist_test_name = name + "_ignorelist_flag_test" |
| test_names += [ignorelist_test_name] |
| action_flags_present_only_for_mnemonic_test( |
| name = ignorelist_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_flags = ["-fsanitize-ignorelist=%s/%s" % ( |
| int_overflow_ignorelist_path, |
| int_overflow_ignorelist_filename, |
| )], |
| ) |
| return test_names |
| |
| def _test_ubsan_misc_undefined_feature(): |
| name = "ubsan_misc_undefined" |
| test_name = name + "_test" |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], # Just pick one; doesn't matter which |
| tags = ["manual"], |
| ) |
| _ubsan_sanitizer_test( |
| name = test_name, |
| target_under_test = name, |
| expected_sanitizers = ["undefined"], |
| ) |
| return test_name |
| |
| def _ubsan_disablement_test( |
| name, |
| target_under_test, |
| expected_disabled_sanitizer, |
| disabled, |
| target_compatible_with): |
| no_sanitize_flag_prefix_format = "-fno-sanitize=%s" |
| if disabled: |
| action_flags_present_only_for_mnemonic_test( |
| name = name, |
| target_under_test = target_under_test, |
| mnemonics = [compile_action_mnemonic], |
| expected_flags = [ |
| no_sanitize_flag_prefix_format % expected_disabled_sanitizer, |
| ], |
| target_compatible_with = target_compatible_with, |
| ) |
| else: |
| action_flags_absent_for_mnemonic_test( |
| name = name, |
| target_under_test = target_under_test, |
| mnemonics = [compile_action_mnemonic], |
| expected_absent_flags = [ |
| no_sanitize_flag_prefix_format % expected_disabled_sanitizer, |
| ], |
| target_compatible_with = target_compatible_with, |
| ) |
| |
| def ubsan_disablement_linux_test( |
| name, |
| target_under_test, |
| expected_disabled_sanitizer, |
| disabled): |
| _ubsan_disablement_test( |
| name = name, |
| target_under_test = target_under_test, |
| expected_disabled_sanitizer = expected_disabled_sanitizer, |
| disabled = disabled, |
| target_compatible_with = ["@//build/bazel/platforms/os:linux"], |
| ) |
| |
| def ubsan_disablement_linux_bionic_test( |
| name, |
| target_under_test, |
| expected_disabled_sanitizer, |
| disabled): |
| _ubsan_disablement_test( |
| name = name, |
| target_under_test = target_under_test, |
| expected_disabled_sanitizer = expected_disabled_sanitizer, |
| disabled = disabled, |
| target_compatible_with = ["@//build/bazel/platforms/os:linux_bionic"], |
| ) |
| |
| def ubsan_disablement_android_test( |
| name, |
| target_under_test, |
| expected_disabled_sanitizer, |
| disabled): |
| _ubsan_disablement_test( |
| name = name, |
| target_under_test = target_under_test, |
| expected_disabled_sanitizer = expected_disabled_sanitizer, |
| disabled = disabled, |
| target_compatible_with = ["@//build/bazel/platforms/os:android"], |
| ) |
| |
| def _test_ubsan_implicit_integer_sign_change_disabled_when_linux_with_integer(): |
| name = "ubsan_implicit_integer_sign_change_disabled_when_linux_with_integer" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_integer"], |
| tags = ["manual"], |
| ) |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "implicit-integer-sign-change", |
| disabled = True, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_implicit_integer_sign_change_not_disabled_when_specified(): |
| name = "ubsan_implicit_integer_sign_change_not_disabled_when_specified" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = [ |
| "ubsan_integer", |
| "ubsan_implicit-integer-sign-change", |
| ], |
| tags = ["manual"], |
| ) |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "implicit-integer-sign-change", |
| disabled = False, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_implicit_integer_sign_change_not_disabled_without_integer(): |
| name = "ubsan_implicit_integer_sign_change_not_disabled_without_integer" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| tags = ["manual"], |
| ) |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "implicit-integer-sign-change", |
| disabled = False, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_unsigned_shift_base_disabled_when_linux_with_integer(): |
| name = "ubsan_unsigned_shift_base_disabled_when_linux_with_integer" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_integer"], |
| tags = ["manual"], |
| ) |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "unsigned-shift-base", |
| disabled = True, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_unsigned_shift_base_not_disabled_when_specified(): |
| name = "ubsan_unsigned_shift_base_not_disabled_when_specified" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = [ |
| "ubsan_integer", |
| "ubsan_unsigned-shift-base", |
| ], |
| tags = ["manual"], |
| ) |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "unsigned-shift-base", |
| disabled = False, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_unsigned_shift_base_not_disabled_without_integer(): |
| name = "ubsan_unsigned_shift_base_not_disabled_without_integer" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| tags = ["manual"], |
| ) |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "unsigned-shift-base", |
| disabled = False, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_unsupported_non_bionic_checks_disabled_when_linux(): |
| name = "ubsan_unsupported_non_bionic_checks_disabled_when_linux" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "function,vptr", |
| disabled = True, |
| ) |
| |
| return test_name |
| |
| # TODO(b/263787980): Uncomment when bionic toolchain is implemented |
| #def _test_ubsan_unsupported_non_bionic_checks_not_disabled_when_linux_bionic(): |
| # name = "ubsan_unsupported_non_bionic_checks_not_disabled_when_linux_bionic" |
| # test_name = name + "_test" |
| # |
| # native.cc_binary( |
| # name = name, |
| # srcs = test_srcs, |
| # features = ["ubsan_undefined"], |
| # tags = ["manual"], |
| # ) |
| # |
| # ubsan_disablement_linux_bionic_test( |
| # name = test_name, |
| # target_under_test = name, |
| # expected_disabled_sanitizer = "function,vptr", |
| # disabled = False, |
| # ) |
| # |
| # return test_name |
| |
| def _test_ubsan_unsupported_non_bionic_checks_not_disabled_when_android(): |
| name = "ubsan_unsupported_non_bionic_checks_not_disabled_when_android" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| ubsan_disablement_android_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "function,vptr", |
| disabled = False, |
| ) |
| |
| return test_name |
| |
| def _test_ubsan_unsupported_non_bionic_checks_not_disabled_when_no_ubsan(): |
| name = "ubsan_unsupported_non_bionic_checks_not_disabled_when_no_ubsan" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| tags = ["manual"], |
| ) |
| |
| ubsan_disablement_linux_test( |
| name = test_name, |
| target_under_test = name, |
| expected_disabled_sanitizer = "function,vptr", |
| disabled = False, |
| ) |
| |
| return test_name |
| |
| sanitizer_no_link_runtime_flag = "-fno-sanitize-link-runtime" |
| |
| def _test_ubsan_no_link_runtime(): |
| name = "ubsan_no_link_runtime" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| android_test_name = name + "_when_android_test" |
| test_names = [android_test_name] |
| action_flags_present_android_test( |
| name = android_test_name, |
| target_under_test = name, |
| mnemonics = [link_action_mnemonic], |
| expected_flags = [sanitizer_no_link_runtime_flag], |
| ) |
| |
| # TODO(b/263787980): Uncomment when bionic toolchain is implemented |
| # bionic_test_name = name + "_when_bionic_test" |
| # action_flags_linux_bionic_test( |
| # name = bionic_test_name, |
| # target_under_test = name, |
| # mnemonics = [link_action_mnemonic], |
| # expected_flags = [sanitizer_no_link_runtime_flag], |
| # ) |
| # test_names += [bionic_test_name] |
| |
| # TODO(b/263787526): Uncomment when musl toolchain is implemented |
| # musl_test_name = name + "_when_musl_test" |
| # action_flags_musl_test( |
| # name = musl_test_name, |
| # target_under_test = name, |
| # mnemonics = [link_action_mnemonic], |
| # expected_flags = [sanitizer_no_link_runtime_flag], |
| # ) |
| # test_names += [musl_test_name] |
| |
| return test_names |
| |
| def action_flags_present_linux_test(**kwargs): |
| action_flags_present_only_for_mnemonic_test( |
| target_compatible_with = ["@//build/bazel/platforms/os:linux"], |
| **kwargs |
| ) |
| |
| def action_flags_present_android_test(**kwargs): |
| action_flags_present_only_for_mnemonic_test( |
| target_compatible_with = ["@//build/bazel/platforms/os:android"], |
| **kwargs |
| ) |
| |
| # TODO(b/263787980): Uncomment when bionic toolchain is implemented |
| #def action_flags_present_linux_bionic_test(**kwargs): |
| # action_flags_present_only_for_mnemonic_test( |
| # target_compatible_with = ["@//build/bazel/platforms/os:linux_bionic"], |
| # **kwargs |
| # ) |
| |
| # TODO(b/263787526): Uncomment when musl toolchain is implemented |
| #def action_flags_present_linux_musl_test(**kwargs): |
| # action_flags_present_only_for_mnemonic_test( |
| # target_compatible_with = ["@//build/bazel/platforms/os:linux_musl"], |
| # **kwargs |
| # ) |
| |
| def action_flags_absent_linux_test(**kwargs): |
| action_flags_absent_for_mnemonic_test( |
| target_compatible_with = ["@//build/bazel/platforms/os:linux"], |
| **kwargs |
| ) |
| |
| def action_flags_absent_android_test(**kwargs): |
| action_flags_absent_for_mnemonic_test( |
| target_compatible_with = ["@//build/bazel/platforms/os:android"], |
| **kwargs |
| ) |
| |
| # TODO(b/263787980): Uncomment when bionic toolchain is implemented |
| #def action_flags_absent_linux_bionic_test(**kwargs): |
| # action_flags_absent_for_mnemonic_test( |
| # target_compatible_with = ["@//build/bazel/platforms/os:linux_bionic"], |
| # **kwargs |
| # ) |
| |
| # TODO(b/263787526): Uncomment when musl toolchain is implemented |
| #def action_flags_absent_linux_musl_test(**kwargs): |
| # action_flags_absent_for_mnemonic_test( |
| # target_compatible_with = ["@//build/bazel/platforms/os:linux_musl"], |
| # **kwargs |
| # ) |
| |
| def _test_ubsan_link_runtime_when_not_bionic_or_musl(): |
| name = "ubsan_link_runtime_when_not_bionic_or_musl" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| tags = ["manual"], |
| ) |
| |
| action_flags_absent_linux_test( |
| name = test_name, |
| target_under_test = name, |
| mnemonics = [link_action_mnemonic], |
| expected_absent_flags = [sanitizer_no_link_runtime_flag], |
| ) |
| |
| return test_name |
| |
| no_undefined_flag = "-Wl,--no-undefined" |
| |
| def _test_no_undefined_flag_present_when_bionic_or_musl(): |
| name = "no_undefined_flag_present_when_bionic_or_musl" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| android_test_name = name + "_when_android_test" |
| test_names = [android_test_name] |
| action_flags_present_android_test( |
| name = android_test_name, |
| target_under_test = name, |
| mnemonics = [link_action_mnemonic], |
| expected_flags = [no_undefined_flag], |
| ) |
| |
| # TODO(b/263787980): Uncomment when bionic toolchain is implemented |
| # bionic_test_name = name + "_when_bionic_test" |
| # test_names += [bionic_test_name] |
| # action_flags_present_linux_bionic_test( |
| # name = bionic_test_name, |
| # target_under_test = name, |
| # mnemonics = [link_action_mnemonic], |
| # expected_flags = [no_undefined_flag], |
| # ) |
| |
| # TODO(b/263787526): Uncomment when musl toolchain is implemented |
| # musl_test_name = name + "_when_musl_test" |
| # test_names += [musl_test_name] |
| # action_flags_present_musl_test( |
| # name = musl_test_name, |
| # target_under_test = name, |
| # mnemonics = [link_action_mnemonic], |
| # expected_flags = [no_undefined_flag], |
| # ) |
| |
| return test_names |
| |
| # TODO(b/274924237): Uncomment after Darwin and Windows have toolchains |
| #def _test_undefined_flag_absent_when_windows_or_darwin(): |
| # name = "no_undefined_flag_absent_when_windows_or_darwin" |
| # |
| # native.cc_binary( |
| # name = name, |
| # srcs = test_srcs, |
| # features = ["ubsan_undefined"], |
| # tags = ["manual"], |
| # ) |
| # |
| # test_name = name + "_test" |
| # action_flags_absent_for_mnemonic_test( |
| # name = test_name, |
| # target_under_test = name, |
| # mnemonics = [compile_action_mnemonic], |
| # expected_absent_flags = [ubsan_prefix_format % "undefined"] |
| # target_compatible_with = [ |
| # "//build/bazel/platforms/os:darwin", |
| # "//build/bazel/platforms/os:windows", |
| # ] |
| # ) |
| # |
| # return test_name |
| |
| def _test_no_undefined_flag_absent_when_not_bionic_or_musl(): |
| name = "no_undefined_flag_absent_when_not_bionic_or_musl" |
| test_name = name + "_test" |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| action_flags_absent_linux_test( |
| name = test_name, |
| target_under_test = name, |
| mnemonics = [link_action_mnemonic], |
| expected_absent_flags = [no_undefined_flag], |
| ) |
| |
| return test_name |
| |
| host_only_flags = ["-fno-sanitize-recover=all"] |
| |
| def _test_host_only_features(): |
| name = "host_only_features" |
| test_names = [] |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| host_test_name = name + "_present_when_host_test" |
| test_names += [host_test_name] |
| action_flags_present_linux_test( |
| name = host_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_flags = host_only_flags, |
| ) |
| |
| device_test_name = name + "_absent_when_device_test" |
| test_names += [device_test_name] |
| action_flags_absent_android_test( |
| name = device_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_absent_flags = host_only_flags, |
| ) |
| |
| return test_names |
| |
| device_only_flags = [ |
| "-fsanitize-trap=all", |
| "-ftrap-function=abort", |
| ] |
| |
| def _test_device_only_features(): |
| name = "device_only_features" |
| test_names = [] |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| |
| device_test_name = name + "_present_when_device_test" |
| test_names += [device_test_name] |
| action_flags_present_android_test( |
| name = device_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_flags = device_only_flags, |
| ) |
| |
| host_test_name = name + "_absent_when_host_test" |
| test_names += [host_test_name] |
| action_flags_absent_linux_test( |
| name = host_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_absent_flags = device_only_flags, |
| ) |
| |
| return test_names |
| |
| def _test_device_only_and_host_only_features_absent_when_ubsan_disabled(): |
| name = "device_only_and_host_only_features_absent_when_ubsan_disabled" |
| test_names = [] |
| |
| native.cc_binary( |
| name = name, |
| srcs = test_srcs, |
| tags = ["manual"], |
| ) |
| |
| host_test_name = name + "_host_test" |
| test_names += [host_test_name] |
| action_flags_absent_linux_test( |
| name = host_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_absent_flags = host_only_flags, |
| ) |
| |
| device_test_name = name + "_device_test" |
| test_names += [device_test_name] |
| action_flags_absent_android_test( |
| name = device_test_name, |
| target_under_test = name, |
| mnemonics = [compile_action_mnemonic], |
| expected_absent_flags = device_only_flags, |
| ) |
| |
| return test_names |
| |
| _exclude_ubsan_rt_name = "ubsan_exclude_rt" |
| |
| def _exclude_ubsan_rt_test_for_os_arch(os, arch, flag): |
| test_name = "%s_%s_test" % ( |
| _exclude_ubsan_rt_name, |
| os + "_" + arch, |
| ) |
| |
| action_flags_present_only_for_mnemonic_test( |
| name = test_name, |
| target_under_test = _exclude_ubsan_rt_name, |
| mnemonics = [link_action_mnemonic], |
| expected_flags = [flag], |
| target_compatible_with = [ |
| "//build/bazel/platforms/os:" + os, |
| "//build/bazel/platforms/arch:" + arch, |
| ], |
| ) |
| |
| return test_name |
| |
| def _test_exclude_ubsan_rt(): |
| native.cc_binary( |
| name = _exclude_ubsan_rt_name, |
| srcs = test_srcs, |
| features = ["ubsan_undefined"], |
| tags = ["manual"], |
| ) |
| test_cases = [ |
| { |
| "os": "android", |
| "arch": "arm", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-arm-android.a", |
| }, |
| { |
| "os": "android", |
| "arch": "arm64", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-aarch64-android.a", |
| }, |
| { |
| "os": "android", |
| "arch": "x86", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-i686-android.a", |
| }, |
| { |
| "os": "android", |
| "arch": "x86_64", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-x86_64-android.a", |
| }, |
| { |
| "os": "linux_bionic", |
| "arch": "x86_64", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-x86_64-android.a", |
| }, |
| { |
| "os": "linux", |
| "arch": "x86", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-i386.a", |
| }, |
| { |
| "os": "linux", |
| "arch": "x86_64", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-x86_64.a", |
| }, |
| { |
| "os": "linux_musl", |
| "arch": "x86", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-i386.a", |
| }, |
| { |
| "os": "linux_musl", |
| "arch": "x86_64", |
| "flag": "-Wl,--exclude-libs=libclang_rt.ubsan_minimal-x86_64.a", |
| }, |
| ] |
| return [ |
| _exclude_ubsan_rt_test_for_os_arch(**tc) |
| for tc in test_cases |
| ] |
| |
| def cc_toolchain_features_ubsan_test_suite(name): |
| individual_tests = [ |
| _test_ubsan_misc_undefined_feature(), |
| _test_ubsan_implicit_integer_sign_change_disabled_when_linux_with_integer(), |
| _test_ubsan_implicit_integer_sign_change_not_disabled_when_specified(), |
| _test_ubsan_implicit_integer_sign_change_not_disabled_without_integer(), |
| _test_ubsan_unsigned_shift_base_disabled_when_linux_with_integer(), |
| _test_ubsan_unsigned_shift_base_not_disabled_when_specified(), |
| _test_ubsan_unsigned_shift_base_not_disabled_without_integer(), |
| _test_ubsan_unsupported_non_bionic_checks_disabled_when_linux(), |
| # TODO(b/263787980): Uncomment when bionic toolchain is implemented |
| # _test_ubsan_unsupported_non_bionic_checks_not_disabled_when_linux_bionic(), |
| _test_ubsan_unsupported_non_bionic_checks_not_disabled_when_android(), |
| _test_ubsan_unsupported_non_bionic_checks_not_disabled_when_no_ubsan(), |
| _test_ubsan_link_runtime_when_not_bionic_or_musl(), |
| # TODO(b/274924237): Uncomment after Darwin and Windows have toolchains |
| # _test_undefined_flag_absent_when_windows_or_darwin(), |
| ] |
| native.test_suite( |
| name = name, |
| tests = individual_tests + |
| _test_ubsan_no_link_runtime() + |
| _test_no_undefined_flag_present_when_bionic_or_musl() + |
| _test_ubsan_integer_overflow_feature() + |
| _test_host_only_features() + |
| _test_device_only_features() + |
| _test_device_only_and_host_only_features_absent_when_ubsan_disabled() + |
| _test_exclude_ubsan_rt(), |
| ) |