brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.0 KiB · 2c44842 Raw
227 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=TRAP %s3 4// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ABORT %s5 6// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-recover=cfi-icall -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=RECOVER %s7 8// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-minimal-runtime -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ABORT_MIN %s9 10// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-recover=cfi-icall -fsanitize-minimal-runtime -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=RECOVER_MIN %s11 12// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-recover=cfi-icall -fsanitize-minimal-runtime -fsanitize-handler-preserve-all-regs -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=PRESERVE_MIN %s13 14// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-minimal-runtime -fsanitize-handler-preserve-all-regs -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ABORT_MIN %s15 16 17// TRAP-LABEL: define hidden void @f(18// TRAP-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {19// TRAP-NEXT:  [[ENTRY:.*:]]20// TRAP-NEXT:    ret void21//22// ABORT-LABEL: define hidden void @f(23// ABORT-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {24// ABORT-NEXT:  [[ENTRY:.*:]]25// ABORT-NEXT:    ret void26//27// RECOVER-LABEL: define hidden void @f(28// RECOVER-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {29// RECOVER-NEXT:  [[ENTRY:.*:]]30// RECOVER-NEXT:    ret void31//32// ABORT_MIN-LABEL: define hidden void @f(33// ABORT_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {34// ABORT_MIN-NEXT:  [[ENTRY:.*:]]35// ABORT_MIN-NEXT:    ret void36//37// RECOVER_MIN-LABEL: define hidden void @f(38// RECOVER_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {39// RECOVER_MIN-NEXT:  [[ENTRY:.*:]]40// RECOVER_MIN-NEXT:    ret void41//42// PRESERVE_MIN-LABEL: define hidden void @f(43// PRESERVE_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {44// PRESERVE_MIN-NEXT:  [[ENTRY:.*:]]45// PRESERVE_MIN-NEXT:    ret void46//47void f() {48}49 50void xf();51 52// TRAP-LABEL: define hidden void @g(53// TRAP-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {54// TRAP-NEXT:  [[ENTRY:.*:]]55// TRAP-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 456// TRAP-NEXT:    [[FP:%.*]] = alloca ptr, align 857// TRAP-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 458// TRAP-NEXT:    [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 459// TRAP-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 060// TRAP-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i6461// TRAP-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf62// TRAP-NEXT:    store ptr [[COND]], ptr [[FP]], align 863// TRAP-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[FP]], align 864// TRAP-NEXT:    [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]65// TRAP-NEXT:    br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]66// TRAP:       [[TRAP]]:67// TRAP-NEXT:    call void @llvm.ubsantrap(i8 2) #[[ATTR4:[0-9]+]], !nosanitize [[META10]]68// TRAP-NEXT:    unreachable, !nosanitize [[META10]]69// TRAP:       [[CONT]]:70// TRAP-NEXT:    call void (...) [[TMP2]]()71// TRAP-NEXT:    ret void72//73// ABORT-LABEL: define hidden void @g(74// ABORT-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {75// ABORT-NEXT:  [[ENTRY:.*:]]76// ABORT-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 477// ABORT-NEXT:    [[FP:%.*]] = alloca ptr, align 878// ABORT-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 479// ABORT-NEXT:    [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 480// ABORT-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 081// ABORT-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i6482// ABORT-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf83// ABORT-NEXT:    store ptr [[COND]], ptr [[FP]], align 884// ABORT-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[FP]], align 885// ABORT-NEXT:    [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]86// ABORT-NEXT:    br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]87// ABORT:       [[HANDLER_CFI_CHECK_FAIL]]:88// ABORT-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[TMP2]] to i64, !nosanitize [[META10]]89// ABORT-NEXT:    call void @__ubsan_handle_cfi_check_fail_abort(ptr @anon.3d4044d65abdda407a92991f1300ec97.1, i64 [[TMP4]], i64 undef) #[[ATTR4:[0-9]+]], !nosanitize [[META10]]90// ABORT-NEXT:    unreachable, !nosanitize [[META10]]91// ABORT:       [[CONT]]:92// ABORT-NEXT:    call void (...) [[TMP2]]()93// ABORT-NEXT:    ret void94//95// RECOVER-LABEL: define hidden void @g(96// RECOVER-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {97// RECOVER-NEXT:  [[ENTRY:.*:]]98// RECOVER-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 499// RECOVER-NEXT:    [[FP:%.*]] = alloca ptr, align 8100// RECOVER-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 4101// RECOVER-NEXT:    [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4102// RECOVER-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0103// RECOVER-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64104// RECOVER-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf105// RECOVER-NEXT:    store ptr [[COND]], ptr [[FP]], align 8106// RECOVER-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8107// RECOVER-NEXT:    [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]108// RECOVER-NEXT:    br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]109// RECOVER:       [[HANDLER_CFI_CHECK_FAIL]]:110// RECOVER-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[TMP2]] to i64, !nosanitize [[META10]]111// RECOVER-NEXT:    call void @__ubsan_handle_cfi_check_fail(ptr @anon.3d4044d65abdda407a92991f1300ec97.1, i64 [[TMP4]], i64 undef) #[[ATTR4:[0-9]+]], !nosanitize [[META10]]112// RECOVER-NEXT:    br label %[[CONT]], !nosanitize [[META10]]113// RECOVER:       [[CONT]]:114// RECOVER-NEXT:    call void (...) [[TMP2]]()115// RECOVER-NEXT:    ret void116//117// ABORT_MIN-LABEL: define hidden void @g(118// ABORT_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {119// ABORT_MIN-NEXT:  [[ENTRY:.*:]]120// ABORT_MIN-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4121// ABORT_MIN-NEXT:    [[FP:%.*]] = alloca ptr, align 8122// ABORT_MIN-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 4123// ABORT_MIN-NEXT:    [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4124// ABORT_MIN-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0125// ABORT_MIN-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64126// ABORT_MIN-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf127// ABORT_MIN-NEXT:    store ptr [[COND]], ptr [[FP]], align 8128// ABORT_MIN-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8129// ABORT_MIN-NEXT:    [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]130// ABORT_MIN-NEXT:    br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]131// ABORT_MIN:       [[HANDLER_CFI_CHECK_FAIL]]:132// ABORT_MIN-NEXT:    call void @__ubsan_handle_cfi_check_fail_minimal_abort() #[[ATTR4:[0-9]+]], !nosanitize [[META10]]133// ABORT_MIN-NEXT:    unreachable, !nosanitize [[META10]]134// ABORT_MIN:       [[CONT]]:135// ABORT_MIN-NEXT:    call void (...) [[TMP2]]()136// ABORT_MIN-NEXT:    ret void137//138// RECOVER_MIN-LABEL: define hidden void @g(139// RECOVER_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {140// RECOVER_MIN-NEXT:  [[ENTRY:.*:]]141// RECOVER_MIN-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4142// RECOVER_MIN-NEXT:    [[FP:%.*]] = alloca ptr, align 8143// RECOVER_MIN-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 4144// RECOVER_MIN-NEXT:    [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4145// RECOVER_MIN-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0146// RECOVER_MIN-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64147// RECOVER_MIN-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf148// RECOVER_MIN-NEXT:    store ptr [[COND]], ptr [[FP]], align 8149// RECOVER_MIN-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8150// RECOVER_MIN-NEXT:    [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]151// RECOVER_MIN-NEXT:    br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]152// RECOVER_MIN:       [[HANDLER_CFI_CHECK_FAIL]]:153// RECOVER_MIN-NEXT:    call void @__ubsan_handle_cfi_check_fail_minimal() #[[ATTR4:[0-9]+]], !nosanitize [[META10]]154// RECOVER_MIN-NEXT:    br label %[[CONT]], !nosanitize [[META10]]155// RECOVER_MIN:       [[CONT]]:156// RECOVER_MIN-NEXT:    call void (...) [[TMP2]]()157// RECOVER_MIN-NEXT:    ret void158//159// PRESERVE_MIN-LABEL: define hidden void @g(160// PRESERVE_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {161// PRESERVE_MIN-NEXT:  [[ENTRY:.*:]]162// PRESERVE_MIN-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4163// PRESERVE_MIN-NEXT:    [[FP:%.*]] = alloca ptr, align 8164// PRESERVE_MIN-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 4165// PRESERVE_MIN-NEXT:    [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4166// PRESERVE_MIN-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0167// PRESERVE_MIN-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64168// PRESERVE_MIN-NEXT:    [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf169// PRESERVE_MIN-NEXT:    store ptr [[COND]], ptr [[FP]], align 8170// PRESERVE_MIN-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8171// PRESERVE_MIN-NEXT:    [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]172// PRESERVE_MIN-NEXT:    br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]173// PRESERVE_MIN:       [[HANDLER_CFI_CHECK_FAIL]]:174// PRESERVE_MIN-NEXT:    call preserve_allcc void @__ubsan_handle_cfi_check_fail_minimal_preserve() #[[ATTR4:[0-9]+]], !nosanitize [[META10]]175// PRESERVE_MIN-NEXT:    br label %[[CONT]], !nosanitize [[META10]]176// PRESERVE_MIN:       [[CONT]]:177// PRESERVE_MIN-NEXT:    call void (...) [[TMP2]]()178// PRESERVE_MIN-NEXT:    ret void179//180void g(int b) {181  void (*fp)() = b ? f : xf;182  fp();183}184//.185// TRAP: [[META6]] = !{i64 0, !"_ZTSFvE"}186// TRAP: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}187// TRAP: [[META8]] = !{i64 0, !"_ZTSFviE"}188// TRAP: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}189// TRAP: [[META10]] = !{}190// TRAP: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}191//.192// ABORT: [[META6]] = !{i64 0, !"_ZTSFvE"}193// ABORT: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}194// ABORT: [[META8]] = !{i64 0, !"_ZTSFviE"}195// ABORT: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}196// ABORT: [[META10]] = !{}197// ABORT: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}198//.199// RECOVER: [[META6]] = !{i64 0, !"_ZTSFvE"}200// RECOVER: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}201// RECOVER: [[META8]] = !{i64 0, !"_ZTSFviE"}202// RECOVER: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}203// RECOVER: [[META10]] = !{}204// RECOVER: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}205//.206// ABORT_MIN: [[META6]] = !{i64 0, !"_ZTSFvE"}207// ABORT_MIN: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}208// ABORT_MIN: [[META8]] = !{i64 0, !"_ZTSFviE"}209// ABORT_MIN: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}210// ABORT_MIN: [[META10]] = !{}211// ABORT_MIN: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}212//.213// RECOVER_MIN: [[META6]] = !{i64 0, !"_ZTSFvE"}214// RECOVER_MIN: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}215// RECOVER_MIN: [[META8]] = !{i64 0, !"_ZTSFviE"}216// RECOVER_MIN: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}217// RECOVER_MIN: [[META10]] = !{}218// RECOVER_MIN: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}219//.220// PRESERVE_MIN: [[META6]] = !{i64 0, !"_ZTSFvE"}221// PRESERVE_MIN: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}222// PRESERVE_MIN: [[META8]] = !{i64 0, !"_ZTSFviE"}223// PRESERVE_MIN: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}224// PRESERVE_MIN: [[META10]] = !{}225// PRESERVE_MIN: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}226//.227