brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.2 KiB · 84183d7 Raw
304 lines · c
1// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=CHECK-NOSANITIZE2 3// RUN: %clang_cc1 -fsanitize=implicit-signed-integer-truncation -fno-sanitize-recover=implicit-signed-integer-truncation -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_implicit_conversion" --check-prefixes=CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE4// RUN: %clang_cc1 -fsanitize=implicit-signed-integer-truncation -fsanitize-recover=implicit-signed-integer-truncation -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_implicit_conversion" --check-prefixes=CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER5// RUN: %clang_cc1 -fsanitize=implicit-signed-integer-truncation -fsanitize-trap=implicit-signed-integer-truncation -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_implicit_conversion" --check-prefixes=CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE6 7// CHECK-SANITIZE-ANYRECOVER-DAG: @[[INT:.*]] = {{.*}} c"'int'\00" }8// CHECK-SANITIZE-ANYRECOVER-DAG: @[[UNSIGNED_SHORT:.*]] = {{.*}} c"'unsigned short'\00" }9// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_100:.*]] = {{.*}}, i32 100, i32 11 }, ptr @[[INT]], ptr @[[UNSIGNED_SHORT]], i8 2, i32 0 }10// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_200:.*]] = {{.*}}, i32 200, i32 11 }, ptr @[[INT]], ptr @[[UNSIGNED_SHORT]], i8 2, i32 0 }11// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_300:.*]] = {{.*}}, i32 300, i32 10 }, ptr @[[INT]], ptr @[[UNSIGNED_SHORT]], i8 2, i32 0 }12// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_400:.*]] = {{.*}}, i32 400, i32 10 }, ptr @[[INT]], ptr @[[UNSIGNED_SHORT]], i8 2, i32 0 }13// CHECK-SANITIZE-ANYRECOVER-DAG: @[[SHORT:.*]] = {{.*}} c"'short'\00" }14// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_500:.*]] = {{.*}}, i32 500, i32 11 }, ptr @[[INT]], ptr @[[SHORT]], i8 2, i32 0 }15// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_600:.*]] = {{.*}}, i32 600, i32 11 }, ptr @[[INT]], ptr @[[SHORT]], i8 2, i32 0 }16// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_700:.*]] = {{.*}}, i32 700, i32 10 }, ptr @[[INT]], ptr @[[SHORT]], i8 2, i32 0 }17// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_800:.*]] = {{.*}}, i32 800, i32 10 }, ptr @[[INT]], ptr @[[SHORT]], i8 2, i32 0 }18 19unsigned short t0(unsigned short x) {20// CHECK-NOSANITIZE-LABEL: @t0(21// CHECK-NOSANITIZE-NEXT:  entry:22// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 223// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 224// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 225// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], 126// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 227// CHECK-NOSANITIZE-NEXT:    ret i16 [[X_RELOADED]]28//29// CHECK-SANITIZE-LABEL:            @t0(30// CHECK-SANITIZE-NEXT:             entry:31// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 232// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 233// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 234// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = zext i16 [[X_RELOADED]] to i3235// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], 136// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i1637// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize38// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize39// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize40// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:41// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize42// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize43// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize44// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_100]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize45// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_100]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize46// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize47// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize48// CHECK-SANITIZE:                  [[CONT]]:49// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 250// CHECK-SANITIZE-NEXT:               ret i16 [[X_RELOADED]]51#line 10052  return x++;53}54unsigned short t1(unsigned short x) {55// CHECK-NOSANITIZE-LABEL: @t1(56// CHECK-NOSANITIZE-NEXT:  entry:57// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 258// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 259// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 260// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], -161// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 262// CHECK-NOSANITIZE-NEXT:    ret i16 [[X_RELOADED]]63//64// CHECK-SANITIZE-LABEL:            @t1(65// CHECK-SANITIZE-NEXT:             entry:66// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 267// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 268// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 269// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = zext i16 [[X_RELOADED]] to i3270// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], -171// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i1672// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize73// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize74// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize75// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:76// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize77// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize78// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize79// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_200]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize80// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_200]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize81// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize82// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize83// CHECK-SANITIZE:                  [[CONT]]:84// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 285// CHECK-SANITIZE-NEXT:               ret i16 [[X_RELOADED]]86#line 20087  return x--;88}89 90unsigned short t2(unsigned short x) {91// CHECK-NOSANITIZE-LABEL: @t2(92// CHECK-NOSANITIZE-NEXT:  entry:93// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 294// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 295// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 296// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], 197// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 298// CHECK-NOSANITIZE-NEXT:    ret i16 [[INC]]99//100// CHECK-SANITIZE-LABEL:            @t2(101// CHECK-SANITIZE-NEXT:             entry:102// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 2103// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 2104// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2105// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = zext i16 [[X_RELOADED]] to i32106// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], 1107// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i16108// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize109// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize110// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize111// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:112// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize113// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize114// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize115// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_300]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize116// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_300]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize117// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize118// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize119// CHECK-SANITIZE:                  [[CONT]]:120// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 2121// CHECK-SANITIZE-NEXT:               ret i16 [[X_PROMOTED_DEMOTED]]122#line 300123  return ++x;124}125 126unsigned short t3(unsigned short x) {127// CHECK-NOSANITIZE-LABEL: @t3(128// CHECK-NOSANITIZE-NEXT:  entry:129// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 2130// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 2131// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2132// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], -1133// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 2134// CHECK-NOSANITIZE-NEXT:    ret i16 [[INC]]135//136// CHECK-SANITIZE-LABEL:            @t3(137// CHECK-SANITIZE-NEXT:             entry:138// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 2139// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 2140// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2141// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = zext i16 [[X_RELOADED]] to i32142// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], -1143// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i16144// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize145// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize146// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize147// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:148// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize149// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize150// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize151// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_400]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize152// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_400]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize153// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize154// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize155// CHECK-SANITIZE:                  [[CONT]]:156// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 2157// CHECK-SANITIZE-NEXT:               ret i16 [[X_PROMOTED_DEMOTED]]158#line 400159  return --x;160}161 162signed short t4(signed short x) {163// CHECK-NOSANITIZE-LABEL: @t4(164// CHECK-NOSANITIZE-NEXT:  entry:165// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 2166// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 2167// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2168// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], 1169// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 2170// CHECK-NOSANITIZE-NEXT:    ret i16 [[X_RELOADED]]171//172// CHECK-SANITIZE-LABEL:            @t4(173// CHECK-SANITIZE-NEXT:             entry:174// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 2175// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 2176// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2177// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = sext i16 [[X_RELOADED]] to i32178// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], 1179// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i16180// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = sext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize181// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize182// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize183// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:184// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize185// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize186// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize187// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_500]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize188// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_500]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize189// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize190// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize191// CHECK-SANITIZE:                  [[CONT]]:192// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 2193// CHECK-SANITIZE-NEXT:               ret i16 [[X_RELOADED]]194#line 500195  return x++;196}197signed short t5(signed short x) {198// CHECK-NOSANITIZE-LABEL: @t5(199// CHECK-NOSANITIZE-NEXT:  entry:200// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 2201// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 2202// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2203// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], -1204// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 2205// CHECK-NOSANITIZE-NEXT:    ret i16 [[X_RELOADED]]206//207// CHECK-SANITIZE-LABEL:            @t5(208// CHECK-SANITIZE-NEXT:             entry:209// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 2210// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 2211// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2212// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = sext i16 [[X_RELOADED]] to i32213// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], -1214// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i16215// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = sext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize216// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize217// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize218// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:219// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize220// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize221// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize222// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_600]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize223// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_600]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize224// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize225// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize226// CHECK-SANITIZE:                  [[CONT]]:227// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 2228// CHECK-SANITIZE-NEXT:               ret i16 [[X_RELOADED]]229#line 600230  return x--;231}232 233signed short t6(signed short x) {234// CHECK-NOSANITIZE-LABEL: @t6(235// CHECK-NOSANITIZE-NEXT:  entry:236// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 2237// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 2238// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2239// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], 1240// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 2241// CHECK-NOSANITIZE-NEXT:    ret i16 [[INC]]242//243// CHECK-SANITIZE-LABEL:            @t6(244// CHECK-SANITIZE-NEXT:             entry:245// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 2246// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 2247// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2248// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = sext i16 [[X_RELOADED]] to i32249// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], 1250// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i16251// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = sext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize252// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize253// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize254// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:255// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize256// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize257// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize258// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_700]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize259// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_700]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize260// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize261// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize262// CHECK-SANITIZE:                  [[CONT]]:263// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 2264// CHECK-SANITIZE-NEXT:               ret i16 [[X_PROMOTED_DEMOTED]]265#line 700266  return ++x;267}268 269signed short t7(signed short x) {270// CHECK-NOSANITIZE-LABEL: @t7(271// CHECK-NOSANITIZE-NEXT:  entry:272// CHECK-NOSANITIZE-NEXT:    [[X_ADDR:%.*]] = alloca i16, align 2273// CHECK-NOSANITIZE-NEXT:    store i16 [[X:%.*]], ptr [[X_ADDR]], align 2274// CHECK-NOSANITIZE-NEXT:    [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2275// CHECK-NOSANITIZE-NEXT:    [[INC:%.*]] = add i16 [[X_RELOADED]], -1276// CHECK-NOSANITIZE-NEXT:    store i16 [[INC]], ptr [[X_ADDR]], align 2277// CHECK-NOSANITIZE-NEXT:    ret i16 [[INC]]278//279// CHECK-SANITIZE-LABEL:            @t7(280// CHECK-SANITIZE-NEXT:             entry:281// CHECK-SANITIZE-NEXT:               [[X_ADDR:%.*]] = alloca i16, align 2282// CHECK-SANITIZE-NEXT:               store i16 [[X:%.*]], ptr [[X_ADDR]], align 2283// CHECK-SANITIZE-NEXT:               [[X_RELOADED:%.*]] = load i16, ptr [[X_ADDR]], align 2284// CHECK-SANITIZE-NEXT:               [[X_PROMOTED:%.*]] = sext i16 [[X_RELOADED]] to i32285// CHECK-SANITIZE-NEXT:               [[INC:%.*]] = add i32 [[X_PROMOTED]], -1286// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED:%.*]] = trunc i32 [[INC]] to i16287// CHECK-SANITIZE-NEXT:               [[X_PROMOTED_DEMOTED_PROMOTED:%.*]] = sext i16 [[X_PROMOTED_DEMOTED]] to i32, !nosanitize288// CHECK-SANITIZE-NEXT:               [[TRUNCHECK:%.*]] = icmp eq i32 [[X_PROMOTED_DEMOTED_PROMOTED]], [[INC]], !nosanitize289// CHECK-SANITIZE-NEXT:               br i1 [[TRUNCHECK]], label %[[CONT:.*]], label %[[HANDLER_IMPLICIT_X_PROMOTEDERSION:[^,]+]],{{.*}} !nosanitize290// CHECK-SANITIZE:                  [[HANDLER_IMPLICIT_X_PROMOTEDERSION]]:291// CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.ubsantrap(i8 7){{.*}}, !nosanitize292// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP1:%.*]] = zext i32 [[INC]] to i64, !nosanitize293// CHECK-SANITIZE-ANYRECOVER-NEXT:    [[TMP2:%.*]] = zext i16 [[X_PROMOTED_DEMOTED]] to i64, !nosanitize294// CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_implicit_conversion_abort(ptr @[[LINE_800]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize295// CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_implicit_conversion(ptr @[[LINE_800]], i64 [[TMP1]], i64 [[TMP2]]) #2, !nosanitize296// CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize297// CHECK-SANITIZE-RECOVER-NEXT:       br label %[[CONT]], !nosanitize298// CHECK-SANITIZE:                  [[CONT]]:299// CHECK-SANITIZE-NEXT:               store i16 [[X_PROMOTED_DEMOTED]], ptr [[X_ADDR]], align 2300// CHECK-SANITIZE-NEXT:               ret i16 [[X_PROMOTED_DEMOTED]]301#line 800302  return --x;303}304