brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · e740fb8 Raw
121 lines · c
1// RUN: %clang   -x c   -fsanitize=implicit-integer-sign-change -O0 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK2// RUN: %clang   -x c   -fsanitize=implicit-integer-sign-change -O1 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK3// RUN: %clang   -x c   -fsanitize=implicit-integer-sign-change -O2 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK4// RUN: %clang   -x c   -fsanitize=implicit-integer-sign-change -O3 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK5 6// RUN: %clangxx -x c++ -fsanitize=implicit-integer-sign-change -O0 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK7// RUN: %clangxx -x c++ -fsanitize=implicit-integer-sign-change -O1 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK8// RUN: %clangxx -x c++ -fsanitize=implicit-integer-sign-change -O2 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK9// RUN: %clangxx -x c++ -fsanitize=implicit-integer-sign-change -O3 %s -o %t && %run %t 2>&1 | FileCheck %s --implicit-check-not="implicit conversion" --check-prefixes=CHECK10 11void test_unsigned() {12  unsigned char x;13 14  x = 0;15  x++;16  x = 0;17  ++x;18 19  x = 0;20  x--;21  // CHECK: {{.*}}integer-sign-change-incdec.c:[[@LINE-1]]:4: runtime error: implicit conversion from type 'int' of value -1 (32-bit, signed) to type 'unsigned char' changed the value to 255 (8-bit, unsigned)22  x = 0;23  --x;24  // CHECK: {{.*}}integer-sign-change-incdec.c:[[@LINE-1]]:3: runtime error: implicit conversion from type 'int' of value -1 (32-bit, signed) to type 'unsigned char' changed the value to 255 (8-bit, unsigned)25 26  x = 1;27  x++;28  x = 1;29  ++x;30 31  x = 1;32  x--;33  x = 1;34  --x;35 36  x = 254;37  x++;38  x = 254;39  ++x;40 41  x = 254;42  x--;43  x = 254;44  --x;45 46  x = 255;47  x++;48  x = 255;49  ++x;50 51  x = 255;52  x--;53  x = 255;54  --x;55}56 57void test_signed() {58  signed char x;59 60  x = -128;61  x++;62  x = -128;63  ++x;64 65  x = -128;66  x--;67  // CHECK: {{.*}}integer-sign-change-incdec.c:[[@LINE-1]]:4: runtime error: implicit conversion from type 'int' of value -129 (32-bit, signed) to type 'signed char' changed the value to 127 (8-bit, signed)68  x = -128;69  --x;70  // CHECK: {{.*}}integer-sign-change-incdec.c:[[@LINE-1]]:3: runtime error: implicit conversion from type 'int' of value -129 (32-bit, signed) to type 'signed char' changed the value to 127 (8-bit, signed)71 72  x = -1;73  x++;74  x = -1;75  ++x;76 77  x = -1;78  x--;79  x = -1;80  --x;81 82  x = 0;83  x++;84  x = 0;85  ++x;86 87  x = 0;88  x--;89  x = 0;90  --x;91 92  x = 1;93  x++;94  x = 1;95  ++x;96 97  x = 1;98  x--;99  x = 1;100  --x;101 102  x = 127;103  x++;104  // CHECK: {{.*}}integer-sign-change-incdec.c:[[@LINE-1]]:4: runtime error: implicit conversion from type 'int' of value 128 (32-bit, signed) to type 'signed char' changed the value to -128 (8-bit, signed)105  x = 127;106  ++x;107  // CHECK: {{.*}}integer-sign-change-incdec.c:[[@LINE-1]]:3: runtime error: implicit conversion from type 'int' of value 128 (32-bit, signed) to type 'signed char' changed the value to -128 (8-bit, signed)108 109  x = 127;110  x--;111  x = 127;112  --x;113}114 115int main() {116  test_unsigned();117  test_signed();118 119  return 0;120}121