blob: 9bed741b3236a59f53110b1ffedc63d690230624 [file] [log] [blame]
Chris Lattnera4d71452010-06-26 21:25:03 +00001// 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
5
6// Tests for signed integer overflow stuff.
7// rdar://7432000 rdar://7221421
8void test1() {
9 // DEFAULT: define void @test1
10 // WRAPV: define void @test1
11 // TRAPV: define void @test1
12 extern volatile int f11G, a, b;
13
14 // DEFAULT: add nsw i32
15 // WRAPV: add i32
16 // TRAPV: llvm.sadd.with.overflow.i32
17 f11G = a + b;
18
19 // DEFAULT: sub nsw i32
20 // WRAPV: sub i32
21 // TRAPV: llvm.ssub.with.overflow.i32
22 f11G = a - b;
23
Chris Lattnera4d71452010-06-26 21:25:03 +000024 // DEFAULT: mul nsw i32
25 // WRAPV: mul i32
26 // TRAPV: llvm.smul.with.overflow.i32
27 f11G = a * b;
Chris Lattner640d3262010-06-26 22:18:28 +000028
29 // DEFAULT: sub nsw i32 0,
30 // WRAPV: sub i32 0,
31 // TRAPV: llvm.ssub.with.overflow.i32(i32 0
32 f11G = -a;
33
34 // PR7426 - Overflow checking for increments.
35
36 // DEFAULT: add nsw i32 {{.*}}, 1
37 // WRAPV: add i32 {{.*}}, 1
38 // TRAPV: llvm.sadd.with.overflow.i32({{.*}}, i32 1)
39 ++a;
40
41 // DEFAULT: add nsw i32 {{.*}}, -1
42 // WRAPV: add i32 {{.*}}, -1
43 // TRAPV: llvm.sadd.with.overflow.i32({{.*}}, i32 -1)
44 --a;
Chris Lattnera4d71452010-06-26 21:25:03 +000045}