xref: /llvm-project/compiler-rt/test/ubsan/TestCases/Misc/abs.cpp (revision f0bbda00bd060919a548b97d564c5208312993a3)
1 // RUN: %clangxx -fsanitize=signed-integer-overflow -w %s -O3 -o %t
2 // RUN: %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER
3 
4 // RUN: %clangxx -fsanitize=signed-integer-overflow -fno-sanitize-recover=signed-integer-overflow -w %s -O3 -o %t.abort
5 // RUN: not %run %t.abort 2>&1 | FileCheck %s --check-prefix=ABORT
6 
7 #include <limits.h>
8 #include <stdlib.h>
9 
main()10 int main() {
11   // ABORT: abs.cpp:[[#@LINE+3]]:17: runtime error: negation of -[[#]] cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
12   // RECOVER: abs.cpp:[[#@LINE+2]]:17: runtime error: negation of -[[#]] cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
13   // RECOVER: abs.cpp:[[#@LINE+2]]:7: runtime error: negation of -[[#]] cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
14   __builtin_abs(INT_MIN);
15   abs(INT_MIN);
16 
17   // RECOVER: abs.cpp:[[#@LINE+2]]:18: runtime error: negation of -[[#]] cannot be represented in type 'long'; cast to an unsigned type to negate this value to itself
18   // RECOVER: abs.cpp:[[#@LINE+2]]:8: runtime error: negation of -[[#]] cannot be represented in type 'long'; cast to an unsigned type to negate this value to itself
19   __builtin_labs(LONG_MIN);
20   labs(LONG_MIN);
21 
22   // RECOVER: abs.cpp:[[#@LINE+2]]:19: runtime error: negation of -[[#]] cannot be represented in type 'long long'; cast to an unsigned type to negate this value to itself
23   // RECOVER: abs.cpp:[[#@LINE+2]]:9: runtime error: negation of -[[#]] cannot be represented in type 'long long'; cast to an unsigned type to negate this value to itself
24   __builtin_llabs(LLONG_MIN);
25   llabs(LLONG_MIN);
26 
27   return 0;
28 }
29