diff options
Diffstat (limited to 'clang/test/CodeGen/catch-implicit-integer-truncations.c')
-rw-r--r-- | clang/test/CodeGen/catch-implicit-integer-truncations.c | 63 |
1 files changed, 15 insertions, 48 deletions
diff --git a/clang/test/CodeGen/catch-implicit-integer-truncations.c b/clang/test/CodeGen/catch-implicit-integer-truncations.c index 485fba35727..ea5b476c220 100644 --- a/clang/test/CodeGen/catch-implicit-integer-truncations.c +++ b/clang/test/CodeGen/catch-implicit-integer-truncations.c @@ -6,16 +6,16 @@ // CHECK-SANITIZE-ANYRECOVER: @[[UNSIGNED_INT:.*]] = {{.*}} c"'unsigned int'\00" } // CHECK-SANITIZE-ANYRECOVER: @[[UNSIGNED_CHAR:.*]] = {{.*}} c"'unsigned char'\00" } -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[UNSIGNED_INT]], {{.*}}* @[[UNSIGNED_CHAR]], i8 0 } +// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_TRUNCATION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[UNSIGNED_INT]], {{.*}}* @[[UNSIGNED_CHAR]], i8 0 } // CHECK-SANITIZE-ANYRECOVER: @[[SIGNED_INT:.*]] = {{.*}} c"'int'\00" } -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_200:.*]] = {{.*}}, i32 200, i32 10 }, {{.*}}* @[[SIGNED_INT]], {{.*}}* @[[UNSIGNED_CHAR]], i8 0 } +// CHECK-SANITIZE-ANYRECOVER: @[[LINE_200_TRUNCATION:.*]] = {{.*}}, i32 200, i32 10 }, {{.*}}* @[[SIGNED_INT]], {{.*}}* @[[UNSIGNED_CHAR]], i8 0 } // CHECK-SANITIZE-ANYRECOVER: @[[SIGNED_CHAR:.*]] = {{.*}} c"'signed char'\00" } -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_300:.*]] = {{.*}}, i32 300, i32 10 }, {{.*}}* @[[UNSIGNED_INT]], {{.*}}* @[[SIGNED_CHAR]], i8 0 } -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_400:.*]] = {{.*}}, i32 400, i32 10 }, {{.*}}* @[[SIGNED_INT]], {{.*}}* @[[SIGNED_CHAR]], i8 0 } +// CHECK-SANITIZE-ANYRECOVER: @[[LINE_300_TRUNCATION:.*]] = {{.*}}, i32 300, i32 10 }, {{.*}}* @[[UNSIGNED_INT]], {{.*}}* @[[SIGNED_CHAR]], i8 0 } +// CHECK-SANITIZE-ANYRECOVER: @[[LINE_400_TRUNCATION:.*]] = {{.*}}, i32 400, i32 10 }, {{.*}}* @[[SIGNED_INT]], {{.*}}* @[[SIGNED_CHAR]], i8 0 } // CHECK-SANITIZE-ANYRECOVER: @[[UINT32:.*]] = {{.*}} c"'uint32_t' (aka 'unsigned int')\00" } // CHECK-SANITIZE-ANYRECOVER: @[[UINT8:.*]] = {{.*}} c"'uint8_t' (aka 'unsigned char')\00" } -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_500:.*]] = {{.*}}, i32 500, i32 10 }, {{.*}}* @[[UINT32]], {{.*}}* @[[UINT8]], i8 0 } +// CHECK-SANITIZE-ANYRECOVER: @[[LINE_500_TRUNCATION:.*]] = {{.*}}, i32 500, i32 10 }, {{.*}}* @[[UINT32]], {{.*}}* @[[UINT8]], i8 0 } // ========================================================================== // // The expected true-positives. These are implicit conversions, and they truncate. @@ -30,8 +30,8 @@ unsigned char unsigned_int_to_unsigned_char(unsigned int src) { // CHECK-SANITIZE: [[HANDLER_IMPLICIT_CONVERSION]]: // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTSRC:.*]] = zext i32 %[[SRC]] to i64, !nosanitize // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTDST:.*]] = zext i8 %[[DST]] to i64, !nosanitize - // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_100]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize - // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_100]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_100_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_100_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize // CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize // CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize // CHECK-SANITIZE: [[CONT]]: @@ -50,8 +50,8 @@ unsigned char signed_int_to_unsigned_char(signed int src) { // CHECK-SANITIZE: [[HANDLER_IMPLICIT_CONVERSION]]: // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTSRC:.*]] = zext i32 %[[SRC]] to i64, !nosanitize // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTDST:.*]] = zext i8 %[[DST]] to i64, !nosanitize - // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_200]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize - // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_200]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_200_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_200_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize // CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize // CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize // CHECK-SANITIZE: [[CONT]]: @@ -70,8 +70,8 @@ signed char unsigned_int_to_signed_char(unsigned int src) { // CHECK-SANITIZE: [[HANDLER_IMPLICIT_CONVERSION]]: // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTSRC:.*]] = zext i32 %[[SRC]] to i64, !nosanitize // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTDST:.*]] = zext i8 %[[DST]] to i64, !nosanitize - // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_300]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize - // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_300]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_300_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_300_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize // CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize // CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize // CHECK-SANITIZE: [[CONT]]: @@ -90,8 +90,8 @@ signed char signed_int_to_signed_char(signed int src) { // CHECK-SANITIZE: [[HANDLER_IMPLICIT_CONVERSION]]: // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTSRC:.*]] = zext i32 %[[SRC]] to i64, !nosanitize // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTDST:.*]] = zext i8 %[[DST]] to i64, !nosanitize - // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_400]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize - // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_400]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_400_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_400_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize // CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize // CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize // CHECK-SANITIZE: [[CONT]]: @@ -117,8 +117,8 @@ uint8_t uint32_to_uint8(uint32_t src) { // CHECK-SANITIZE: [[HANDLER_IMPLICIT_CONVERSION]]: // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTSRC:.*]] = zext i32 %[[SRC]] to i64, !nosanitize // CHECK-SANITIZE-ANYRECOVER-NEXT: %[[EXTDST:.*]] = zext i8 %[[DST]] to i64, !nosanitize - // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_500]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize - // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_500]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_implicit_conversion_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_500_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize + // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_implicit_conversion(i8* bitcast ({ {{{.*}}}, {{{.*}}}*, {{{.*}}}*, i8 }* @[[LINE_500_TRUNCATION]] to i8*), i64 %[[EXTSRC]], i64 %[[EXTDST]]){{.*}}, !nosanitize // CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize // CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize // CHECK-SANITIZE: [[CONT]]: @@ -139,7 +139,6 @@ uint8_t uint32_to_uint8(uint32_t src) { unsigned char explicit_conversion_interference0(unsigned int c) { // CHECK-SANITIZE: %[[ANYEXT:.*]] = zext i8 %[[DST:.*]] to i16, !nosanitize // CHECK-SANITIZE: call - // CHECK: } return (unsigned short)c; } @@ -148,7 +147,6 @@ unsigned char explicit_conversion_interference0(unsigned int c) { unsigned char explicit_conversion_interference1(unsigned int c) { // CHECK-SANITIZE: %[[ANYEXT:.*]] = zext i16 %[[DST:.*]] to i32, !nosanitize // CHECK-SANITIZE: call - // CHECK: } unsigned short b; return (unsigned char)(b = c); } @@ -164,25 +162,21 @@ unsigned char explicit_conversion_interference1(unsigned int c) { __attribute__((no_sanitize("undefined"))) unsigned char blacklist_0(unsigned int src) { // We are not in "undefined" group, so that doesn't work. // CHECK-SANITIZE: call - // CHECK: } return src; } // CHECK-LABEL: @blacklist_1 __attribute__((no_sanitize("integer"))) unsigned char blacklist_1(unsigned int src) { - // CHECK: } return src; } // CHECK-LABEL: @blacklist_2 __attribute__((no_sanitize("implicit-conversion"))) unsigned char blacklist_2(unsigned int src) { - // CHECK: } return src; } // CHECK-LABEL: @blacklist_3 __attribute__((no_sanitize("implicit-integer-truncation"))) unsigned char blacklist_3(unsigned int src) { - // CHECK: } return src; } @@ -191,25 +185,21 @@ __attribute__((no_sanitize("implicit-integer-truncation"))) unsigned char blackl // CHECK-LABEL: @explicit_unsigned_int_to_unsigned_char unsigned char explicit_unsigned_int_to_unsigned_char(unsigned int src) { - // CHECK: } return (unsigned char)src; } // CHECK-LABEL: @explicit_signed_int_to_unsigned_char unsigned char explicit_signed_int_to_unsigned_char(signed int src) { - // CHECK: } return (unsigned char)src; } // CHECK-LABEL: @explicit_unsigned_int_to_signed_char signed char explicit_unsigned_int_to_signed_char(unsigned int src) { - // CHECK: } return (signed char)src; } // CHECK-LABEL: @explicit_signed_int_to_signed_char signed char explicit_signed_int_to_signed_char(signed int src) { - // CHECK: } return (signed char)src; } @@ -218,25 +208,21 @@ signed char explicit_signed_int_to_signed_char(signed int src) { // CHECK-LABEL: @explicit_unsigned_int_to_unsigned_int unsigned int explicit_unsigned_int_to_unsigned_int(unsigned int src) { - // CHECK: } return (unsigned int)src; } // CHECK-LABEL: @explicit_signed_int_to_signed_int signed int explicit_signed_int_to_signed_int(signed int src) { - // CHECK: } return (signed int)src; } // CHECK-LABEL: @explicit_unsigned_char_to_signed_char unsigned char explicit_unsigned_char_to_signed_char(unsigned char src) { - // CHECK: } return (unsigned char)src; } // CHECK-LABEL: @explicit_signed_char_to_signed_char signed char explicit_signed_char_to_signed_char(signed char src) { - // CHECK: } return (signed char)src; } @@ -245,25 +231,21 @@ signed char explicit_signed_char_to_signed_char(signed char src) { // CHECK-LABEL: @unsigned_char_to_unsigned_int unsigned int unsigned_char_to_unsigned_int(unsigned char src) { - // CHECK: } return src; } // CHECK-LABEL: @signed_char_to_unsigned_int unsigned int signed_char_to_unsigned_int(signed char src) { - // CHECK: } return src; } // CHECK-LABEL: @unsigned_char_to_signed_int signed int unsigned_char_to_signed_int(unsigned char src) { - // CHECK: } return src; } // CHECK-LABEL: @signed_char_to_signed_int signed int signed_char_to_signed_int(signed char src) { - // CHECK: } return src; } @@ -272,25 +254,21 @@ signed int signed_char_to_signed_int(signed char src) { // CHECK-LABEL: @explicit_unsigned_char_to_unsigned_int unsigned int explicit_unsigned_char_to_unsigned_int(unsigned char src) { - // CHECK: } return (unsigned int)src; } // CHECK-LABEL: @explicit_signed_char_to_unsigned_int unsigned int explicit_signed_char_to_unsigned_int(signed char src) { - // CHECK: } return (unsigned int)src; } // CHECK-LABEL: @explicit_unsigned_char_to_signed_int signed int explicit_unsigned_char_to_signed_int(unsigned char src) { - // CHECK: } return (signed int)src; } // CHECK-LABEL: @explicit_signed_char_to_signed_int signed int explicit_signed_char_to_signed_int(signed char src) { - // CHECK: } return (signed int)src; } @@ -299,25 +277,21 @@ signed int explicit_signed_char_to_signed_int(signed char src) { // CHECK-LABEL: @unsigned_int_to_bool _Bool unsigned_int_to_bool(unsigned int src) { - // CHECK: } return src; } // CHECK-LABEL: @signed_int_to_bool _Bool signed_int_to_bool(signed int src) { - // CHECK: } return src; } // CHECK-LABEL: @explicit_unsigned_int_to_bool _Bool explicit_unsigned_int_to_bool(unsigned int src) { - // CHECK: } return (_Bool)src; } // CHECK-LABEL: @explicit_signed_int_to_bool _Bool explicit_signed_int_to_bool(signed int src) { - // CHECK: } return (_Bool)src; } @@ -328,13 +302,11 @@ _Bool explicit_signed_int_to_bool(signed int src) { // CHECK-LABEL: @explicit_voidptr_to_unsigned_char unsigned char explicit_voidptr_to_unsigned_char(void *src) { - // CHECK: } return (unsigned char)src; } // CHECK-LABEL: @explicit_voidptr_to_signed_char signed char explicit_voidptr_to_signed_char(void *src) { - // CHECK: } return (signed char)src; } @@ -343,25 +315,21 @@ signed char explicit_voidptr_to_signed_char(void *src) { // CHECK-LABEL: @float_to_unsigned_int unsigned int float_to_unsigned_int(float src) { - // CHECK: } return src; } // CHECK-LABEL: @float_to_signed_int signed int float_to_signed_int(float src) { - // CHECK: } return src; } // CHECK-LABEL: @double_to_unsigned_int unsigned int double_to_unsigned_int(double src) { - // CHECK: } return src; } // CHECK-LABEL: @double_to_signed_int signed int double_to_signed_int(double src) { - // CHECK: } return src; } @@ -370,6 +338,5 @@ signed int double_to_signed_int(double src) { // CHECK-LABEL: @double_to_float float double_to_float(double src) { - // CHECK: } return src; } |