brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 234ed75 Raw
31 lines · c
1// Check -fsanitize=signed-integer-overflow and2// -fsanitize=unsigned-integer-overflow with promoted unsigned types3//4// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s \5// RUN:   -fsanitize=signed-integer-overflow | FileCheck %s --check-prefix=CHECKS6// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s \7// RUN:   -fsanitize=unsigned-integer-overflow | FileCheck %s --check-prefix=CHECKU8 9unsigned short si, sj, sk;10 11// CHECKS-LABEL:   define{{.*}} void @testshortmul()12// CHECKU-LABEL: define{{.*}} void @testshortmul()13void testshortmul(void) {14 15  // CHECKS:        load i16, ptr @sj16  // CHECKS:        load i16, ptr @sk17  // CHECKS:        [[T1:%.*]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])18  // CHECKS-NEXT:   [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 019  // CHECKS-NEXT:   [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 120  // CHECKS:        call void @__ubsan_handle_mul_overflow21  //22  // CHECKU:      [[T1:%.*]] = load i16, ptr @sj23  // CHECKU:      [[T2:%.*]] = zext i16 [[T1]]24  // CHECKU:      [[T3:%.*]] = load i16, ptr @sk25  // CHECKU:      [[T4:%.*]] = zext i16 [[T3]]26  // CHECKU-NOT:  llvm.smul27  // CHECKU-NOT:  llvm.umul28  // CHECKU:      [[T5:%.*]] = mul nsw i32 [[T2]], [[T4]]29  si = sj * sk;30}31