brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 82f39ed Raw
150 lines · cpp
1// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=CHECK2// RUN: %clang_cc1 -fsanitize=implicit-integer-sign-change -fno-sanitize-recover=implicit-integer-sign-change -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-SANITIZE3// RUN: %clang_cc1 -fsanitize=implicit-integer-sign-change -fsanitize-recover=implicit-integer-sign-change -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-SANITIZE4// RUN: %clang_cc1 -fsanitize=implicit-integer-sign-change -fsanitize-trap=implicit-integer-sign-change -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-SANITIZE5 6extern "C" { // Disable name mangling.7 8// ========================================================================== //9// The expected true-negatives.10// ========================================================================== //11 12// Sanitization is explicitly disabled.13// ========================================================================== //14 15// CHECK-LABEL: @ignorelist_016__attribute__((no_sanitize("undefined"))) unsigned int ignorelist_0(signed int src) {17  // We are not in "undefined" group, so that doesn't work.18  // CHECK-SANITIZE: call19  // CHECK: }20  return src;21}22 23// CHECK-LABEL: @ignorelist_124__attribute__((no_sanitize("integer"))) unsigned int ignorelist_1(signed int src) {25  // CHECK-SANITIZE-NOT: call26  // CHECK: }27  return src;28}29 30// CHECK-LABEL: @ignorelist_231__attribute__((no_sanitize("implicit-conversion"))) unsigned int ignorelist_2(signed int src) {32  // CHECK-SANITIZE-NOT: call33  // CHECK: }34  return src;35}36 37// CHECK-LABEL: @ignorelist_338__attribute__((no_sanitize("implicit-integer-sign-change"))) unsigned int ignorelist_3(signed int src) {39  // CHECK-SANITIZE-NOT: call40  // CHECK: }41  return src;42}43 44// Explicit sign-changing conversions.45// ========================================================================== //46 47// CHECK-LABEL: @explicit_signed_int_to_unsigned_int48unsigned int explicit_signed_int_to_unsigned_int(signed int src) {49  // CHECK-SANITIZE-NOT: call50  // CHECK: }51  return (unsigned int)src;52}53 54// CHECK-LABEL: @explicit_unsigned_int_to_signed_int55signed int explicit_unsigned_int_to_signed_int(unsigned int src) {56  // CHECK-SANITIZE-NOT: call57  // CHECK: }58  return (signed int)src;59}60 61// Explicit NOP conversions.62// ========================================================================== //63 64// CHECK-LABEL: @explicit_unsigned_int_to_unsigned_int65unsigned int explicit_unsigned_int_to_unsigned_int(unsigned int src) {66  // CHECK-SANITIZE-NOT: call67  // CHECK: }68  return (unsigned int)src;69}70 71// CHECK-LABEL: @explicit_signed_int_to_signed_int72signed int explicit_signed_int_to_signed_int(signed int src) {73  // CHECK-SANITIZE-NOT: call74  // CHECK: }75  return (signed int)src;76}77 78// Explicit functional sign-changing casts.79// ========================================================================== //80 81using UnsignedInt = unsigned int;82using SignedInt = signed int;83 84// CHECK-LABEL: explicit_functional_unsigned_int_to_signed_int85signed int explicit_functional_unsigned_int_to_signed_int(unsigned int src) {86  // CHECK-SANITIZE-NOT: call87  // CHECK: }88  return SignedInt(src);89}90 91// CHECK-LABEL: @explicit_functional_signed_int_to_unsigned_int92unsigned int explicit_functional_signed_int_to_unsigned_int(signed int src) {93  // CHECK-SANITIZE-NOT: call94  // CHECK: }95  return UnsignedInt(src);96}97 98// Explicit functional NOP casts.99// ========================================================================== //100 101// CHECK-LABEL: @explicit_functional_unsigned_int_to_unsigned_int102unsigned int explicit_functional_unsigned_int_to_unsigned_int(unsigned int src) {103  // CHECK-SANITIZE-NOT: call104  // CHECK: }105  return UnsignedInt(src);106}107 108// CHECK-LABEL: @explicit_functional_signed_int_to_signed_int109signed int explicit_functional_signed_int_to_signed_int(signed int src) {110  // CHECK-SANITIZE-NOT: call111  // CHECK: }112  return SignedInt(src);113}114 115// Explicit C++-style sign-changing casts.116// ========================================================================== //117 118// CHECK-LABEL: @explicit_cppstyle_unsigned_int_to_signed_int119signed int explicit_cppstyle_unsigned_int_to_signed_int(unsigned int src) {120  // CHECK-SANITIZE-NOT: call121  // CHECK: }122  return static_cast<signed int>(src);123}124 125// CHECK-LABEL: @explicit_cppstyle_signed_int_to_unsigned_int126unsigned int explicit_cppstyle_signed_int_to_unsigned_int(signed int src) {127  // CHECK-SANITIZE-NOT: call128  // CHECK: }129  return static_cast<unsigned int>(src);130}131 132// Explicit C++-style casts NOP casts.133// ========================================================================== //134 135// CHECK-LABEL: @explicit_cppstyle_unsigned_int_to_unsigned_int136unsigned int explicit_cppstyle_unsigned_int_to_unsigned_int(unsigned int src) {137  // CHECK-SANITIZE-NOT: call138  // CHECK: }139  return static_cast<unsigned int>(src);140}141 142// CHECK-LABEL: @explicit_cppstyle_signed_int_to_signed_int143signed int explicit_cppstyle_signed_int_to_signed_int(signed int src) {144  // CHECK-SANITIZE-NOT: call145  // CHECK: }146  return static_cast<signed int>(src);147}148 149} // extern "C"150