Will Dietz | b854036 | 2012-11-27 15:01:55 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -fsanitize=unsigned-integer-overflow | FileCheck %s --check-prefix=UNSIGNED |
| 2 | // RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -ftrapv | FileCheck %s --check-prefix=TRAPV |
| 3 | // RUN: %clang_cc1 -triple x86_64-apple-darwin %s -emit-llvm -o - -fsanitize=unsigned-integer-overflow -ftrapv | FileCheck %s --check-prefix=BOTH |
| 4 | // Verify that -ftrapv and -fsanitize=unsigned-integer-overflow |
| 5 | // work together as expected |
| 6 | |
| 7 | |
| 8 | // UNSIGNED: @test_signed |
| 9 | // TRAPV: @test_signed |
| 10 | // BOTH: @test_signed |
| 11 | void test_signed() { |
| 12 | extern volatile int a, b, c; |
| 13 | // UNSIGNED: add nsw i32 |
| 14 | // UNSIGNED-NOT: overflow |
| 15 | // TRAPV: sadd.with.overflow.i32 |
| 16 | // TRAPV-NOT: ubsan |
| 17 | // TRAPV: llvm.trap |
| 18 | // BOTH: sadd.with.overflow.i32 |
| 19 | // BOTH-NOT: ubsan |
| 20 | // BOTH: llvm.trap |
| 21 | a = b + c; |
| 22 | } |
| 23 | |
| 24 | // UNSIGNED: @test_unsigned |
| 25 | // TRAPV: @test_unsigned |
| 26 | // BOTH: @test_unsigned |
| 27 | void test_unsigned() { |
| 28 | extern volatile unsigned x, y, z; |
| 29 | // UNSIGNED: uadd.with.overflow.i32 |
| 30 | // UNSIGNED-NOT: llvm.trap |
| 31 | // UNSIGNED: ubsan |
| 32 | // TRAPV-NOT: overflow |
| 33 | // TRAPV-NOT: llvm.trap |
| 34 | // BOTH: uadd.with.overflow.i32 |
| 35 | // BOTH: ubsan |
| 36 | // BOTH-NOT: llvm.trap |
| 37 | x = y + z; |
| 38 | } |