brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · a3a66e6 Raw
108 lines · c
1// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - | FileCheck %s --check-prefix=DEFAULT2// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -fwrapv | FileCheck %s --check-prefix=WRAPV3// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -ftrapv | FileCheck %s --check-prefix=TRAPV4// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -fsanitize=signed-integer-overflow | FileCheck %s --check-prefixes=CATCH_UB,NOCATCH_UB_POINTER5// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -fsanitize=signed-integer-overflow -fwrapv | FileCheck %s --check-prefixes=CATCH_UB,NOCATCH_UB_POINTER6// RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -ftrapv -ftrapv-handler foo | FileCheck %s --check-prefix=TRAPV_HANDLER7 8 9// Tests for signed integer overflow stuff.10void test1(void) {11  // DEFAULT-LABEL: define{{.*}} void @test112  // WRAPV-LABEL: define{{.*}} void @test113  // TRAPV-LABEL: define{{.*}} void @test114  extern volatile int f11G, a, b;15  16  // DEFAULT: add nsw i3217  // WRAPV: add i3218  // TRAPV: llvm.sadd.with.overflow.i3219  // CATCH_UB: llvm.sadd.with.overflow.i3220  // TRAPV_HANDLER: foo(21  f11G = a + b;22  23  // DEFAULT: sub nsw i3224  // WRAPV: sub i3225  // TRAPV: llvm.ssub.with.overflow.i3226  // CATCH_UB: llvm.ssub.with.overflow.i3227  // TRAPV_HANDLER: foo(28  f11G = a - b;29  30  // DEFAULT: mul nsw i3231  // WRAPV: mul i3232  // TRAPV: llvm.smul.with.overflow.i3233  // CATCH_UB: llvm.smul.with.overflow.i3234  // TRAPV_HANDLER: foo(35  f11G = a * b;36 37  // DEFAULT: sub nsw i32 0, 38  // WRAPV: sub i32 0, 39  // TRAPV: llvm.ssub.with.overflow.i32(i32 040  // CATCH_UB: llvm.ssub.with.overflow.i32(i32 041  // TRAPV_HANDLER: foo(42  f11G = -a;43  44  // PR7426 - Overflow checking for increments.45  46  // DEFAULT: add nsw i32 {{.*}}, 147  // WRAPV: add i32 {{.*}}, 148  // TRAPV: llvm.sadd.with.overflow.i32({{.*}}, i32 1)49  // CATCH_UB: llvm.sadd.with.overflow.i32({{.*}}, i32 1)50  // TRAPV_HANDLER: foo(51  ++a;52  53  // DEFAULT: add nsw i32 {{.*}}, -154  // WRAPV: add i32 {{.*}}, -155  // TRAPV: llvm.ssub.with.overflow.i32({{.*}}, i32 1)56  // CATCH_UB: llvm.ssub.with.overflow.i32({{.*}}, i32 1)57  // TRAPV_HANDLER: foo(58  --a;59  60  // -fwrapv does not affect inbounds for GEP's.61  // This is controlled by -fwrapv-pointer instead.62  extern int* P;63  ++P;64  // DEFAULT: getelementptr inbounds nuw i32, ptr65  // WRAPV: getelementptr inbounds nuw i32, ptr66  // TRAPV: getelementptr inbounds nuw i32, ptr67  // NOCATCH_UB_POINTER: getelementptr inbounds nuw i32, ptr68 69  // PR9350: char pre-increment never overflows.70  extern volatile signed char PR9350_char_inc;71  // DEFAULT: add i8 {{.*}}, 172  // WRAPV: add i8 {{.*}}, 173  // TRAPV: add i8 {{.*}}, 174  // CATCH_UB: add i8 {{.*}}, 175  ++PR9350_char_inc;76 77  // PR9350: char pre-decrement never overflows.78  extern volatile signed char PR9350_char_dec;79  // DEFAULT: add i8 {{.*}}, -180  // WRAPV: add i8 {{.*}}, -181  // TRAPV: add i8 {{.*}}, -182  // CATCH_UB: add i8 {{.*}}, -183  --PR9350_char_dec;84 85  // PR9350: short pre-increment never overflows.86  extern volatile signed short PR9350_short_inc;87  // DEFAULT: add i16 {{.*}}, 188  // WRAPV: add i16 {{.*}}, 189  // TRAPV: add i16 {{.*}}, 190  // CATCH_UB: add i16 {{.*}}, 191  ++PR9350_short_inc;92 93  // PR9350: short pre-decrement never overflows.94  extern volatile signed short PR9350_short_dec;95  // DEFAULT: add i16 {{.*}}, -196  // WRAPV: add i16 {{.*}}, -197  // TRAPV: add i16 {{.*}}, -198  // CATCH_UB: add i16 {{.*}}, -199  --PR9350_short_dec;100 101  // PR24256: don't instrument __builtin_frame_address.102  __builtin_frame_address(0 + 0);103  // DEFAULT:  call ptr @llvm.frameaddress.p0(i32 0)104  // WRAPV:    call ptr @llvm.frameaddress.p0(i32 0)105  // TRAPV:    call ptr @llvm.frameaddress.p0(i32 0)106  // CATCH_UB: call ptr @llvm.frameaddress.p0(i32 0)107}108