1 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s --check-prefix=DEFAULT
2 // RUN: %clang_cc1 %s -emit-llvm -o - -fwrapv | FileCheck %s --check-prefix=WRAPV
3 // RUN: %clang_cc1 %s -emit-llvm -o - -ftrapv | FileCheck %s --check-prefix=TRAPV
4 // RUN: %clang_cc1 %s -emit-llvm -o - -ftrapv -ftrapv-handler foo | FileCheck %s --check-prefix=TRAPV_HANDLER
7 // Tests for signed integer overflow stuff.
8 // rdar://7432000 rdar://7221421
10 // DEFAULT: define void @test1
11 // WRAPV: define void @test1
12 // TRAPV: define void @test1
13 extern volatile int f11G
, a
, b
;
15 // DEFAULT: add nsw i32
17 // TRAPV: llvm.sadd.with.overflow.i32
18 // TRAPV_HANDLER: foo(
21 // DEFAULT: sub nsw i32
23 // TRAPV: llvm.ssub.with.overflow.i32
24 // TRAPV_HANDLER: foo(
27 // DEFAULT: mul nsw i32
29 // TRAPV: llvm.smul.with.overflow.i32
30 // TRAPV_HANDLER: foo(
33 // DEFAULT: sub nsw i32 0,
35 // TRAPV: llvm.ssub.with.overflow.i32(i32 0
36 // TRAPV_HANDLER: foo(
39 // PR7426 - Overflow checking for increments.
41 // DEFAULT: add nsw i32 {{.*}}, 1
42 // WRAPV: add i32 {{.*}}, 1
43 // TRAPV: llvm.sadd.with.overflow.i32({{.*}}, i32 1)
44 // TRAPV_HANDLER: foo(
47 // DEFAULT: add nsw i32 {{.*}}, -1
48 // WRAPV: add i32 {{.*}}, -1
49 // TRAPV: llvm.sadd.with.overflow.i32({{.*}}, i32 -1)
50 // TRAPV_HANDLER: foo(