[ubsan] Make the cast overflow message less redundant
llvm-svn: 301589
This commit is contained in:
parent
4094d9a127
commit
f2e6206fa0
|
@ -390,7 +390,7 @@ static void handleFloatCastOverflow(void *DataPtr, ValueHandle From,
|
|||
ScopedReport R(Opts, Loc, ET);
|
||||
|
||||
Diag(Loc, DL_Error,
|
||||
"value %0 is outside the range of representable values of type %2")
|
||||
"%0 is outside the range of representable values of type %2")
|
||||
<< Value(*FromType, From) << *FromType << *ToType;
|
||||
}
|
||||
|
||||
|
|
|
@ -86,42 +86,42 @@ int main(int argc, char **argv) {
|
|||
case '0': {
|
||||
// Note that values between 0x7ffffe00 and 0x80000000 may or may not
|
||||
// successfully round-trip, depending on the rounding mode.
|
||||
// CHECK-0: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: value 2.14748{{.*}} is outside the range of representable values of type 'int'
|
||||
// CHECK-0: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: 2.14748{{.*}} is outside the range of representable values of type 'int'
|
||||
static int test_int = MaxFloatRepresentableAsInt + 0x80;
|
||||
// CHECK-0: SUMMARY: {{.*}}Sanitizer: float-cast-overflow {{.*}}cast-overflow.cpp:[[@LINE-1]]
|
||||
return 0;
|
||||
}
|
||||
case '1': {
|
||||
// CHECK-1: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: value -2.14748{{.*}} is outside the range of representable values of type 'int'
|
||||
// CHECK-1: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: -2.14748{{.*}} is outside the range of representable values of type 'int'
|
||||
static int test_int = MinFloatRepresentableAsInt - 0x100;
|
||||
return 0;
|
||||
}
|
||||
case '2': {
|
||||
// CHECK-2: {{.*}}cast-overflow.cpp:[[@LINE+2]]:37: runtime error: value -1 is outside the range of representable values of type 'unsigned int'
|
||||
// CHECK-2: {{.*}}cast-overflow.cpp:[[@LINE+2]]:37: runtime error: -1 is outside the range of representable values of type 'unsigned int'
|
||||
volatile float f = -1.0;
|
||||
volatile unsigned u = (unsigned)f;
|
||||
return 0;
|
||||
}
|
||||
case '3': {
|
||||
// CHECK-3: {{.*}}cast-overflow.cpp:[[@LINE+1]]:37: runtime error: value 4.2949{{.*}} is outside the range of representable values of type 'unsigned int'
|
||||
// CHECK-3: {{.*}}cast-overflow.cpp:[[@LINE+1]]:37: runtime error: 4.2949{{.*}} is outside the range of representable values of type 'unsigned int'
|
||||
static int test_int = (unsigned)(MaxFloatRepresentableAsUInt + 0x100);
|
||||
return 0;
|
||||
}
|
||||
|
||||
case '4': {
|
||||
// CHECK-4: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: value {{.*}} is outside the range of representable values of type 'int'
|
||||
// CHECK-4: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: {{.*}} is outside the range of representable values of type 'int'
|
||||
static int test_int = Inf;
|
||||
return 0;
|
||||
}
|
||||
case '5': {
|
||||
// CHECK-5: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: value {{.*}} is outside the range of representable values of type 'int'
|
||||
// CHECK-5: {{.*}}cast-overflow.cpp:[[@LINE+1]]:27: runtime error: {{.*}} is outside the range of representable values of type 'int'
|
||||
static int test_int = NaN;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Integer -> floating point overflow.
|
||||
case '6': {
|
||||
// CHECK-6: cast-overflow.cpp:[[@LINE+2]]:{{34: runtime error: value 0xffffff00000000000000000000000001 is outside the range of representable values of type 'float'| __int128 not supported}}
|
||||
// CHECK-6: cast-overflow.cpp:[[@LINE+2]]:{{34: runtime error: 0xffffff00000000000000000000000001 is outside the range of representable values of type 'float'| __int128 not supported}}
|
||||
#if defined(__SIZEOF_INT128__) && !defined(_WIN32)
|
||||
static int test_int = (float)(FloatMaxAsUInt128 + 1);
|
||||
return 0;
|
||||
|
@ -135,16 +135,16 @@ int main(int argc, char **argv) {
|
|||
// FIXME: The backend cannot lower __fp16 operations on x86 yet.
|
||||
//case '7':
|
||||
// (__fp16)65504; // ok
|
||||
// // CHECK-7: runtime error: value 65505 is outside the range of representable values of type '__fp16'
|
||||
// // CHECK-7: runtime error: 65505 is outside the range of representable values of type '__fp16'
|
||||
// return (__fp16)65505;
|
||||
|
||||
// Floating point -> floating point overflow.
|
||||
case '8':
|
||||
// CHECK-8: {{.*}}cast-overflow.cpp:[[@LINE+1]]:19: runtime error: value 1e+39 is outside the range of representable values of type 'float'
|
||||
// CHECK-8: {{.*}}cast-overflow.cpp:[[@LINE+1]]:19: runtime error: 1e+39 is outside the range of representable values of type 'float'
|
||||
return (float)1e39;
|
||||
case '9':
|
||||
volatile long double ld = 300.0;
|
||||
// CHECK-9: {{.*}}cast-overflow.cpp:[[@LINE+1]]:14: runtime error: value 300 is outside the range of representable values of type 'char'
|
||||
// CHECK-9: {{.*}}cast-overflow.cpp:[[@LINE+1]]:14: runtime error: 300 is outside the range of representable values of type 'char'
|
||||
char c = ld;
|
||||
return c;
|
||||
}
|
||||
|
|
|
@ -32,5 +32,5 @@ int main(int argc, char *argv[]) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// CHECK-ERROR: runtime error: value -4 is outside the range of representable values of type 'unsigned int'
|
||||
// CHECK-ERROR: runtime error: -4 is outside the range of representable values of type 'unsigned int'
|
||||
|
||||
|
|
Loading…
Reference in New Issue