diff options
| author | Dániel Buga <bugadani@gmail.com> | 2020-08-25 11:44:18 +0200 |
|---|---|---|
| committer | Dániel Buga <bugadani@gmail.com> | 2020-08-31 08:19:15 +0200 |
| commit | 1d157ce797dddcee16a577796199b1144b4f7f34 (patch) | |
| tree | 4f8f56536b4cb1d0a27742aac89a57cdca5b4d80 /src/test/codegen | |
| parent | c88b167f1518370833c9216706d09735d1e2d697 (diff) | |
| download | rust-1d157ce797dddcee16a577796199b1144b4f7f34.tar.gz rust-1d157ce797dddcee16a577796199b1144b4f7f34.zip | |
Add codegen tests
Diffstat (limited to 'src/test/codegen')
| -rw-r--r-- | src/test/codegen/enum-bounds-check-derived-idx.rs | 25 | ||||
| -rw-r--r-- | src/test/codegen/enum-bounds-check-issue-13926.rs | 19 | ||||
| -rw-r--r-- | src/test/codegen/enum-bounds-check.rs | 12 |
3 files changed, 56 insertions, 0 deletions
diff --git a/src/test/codegen/enum-bounds-check-derived-idx.rs b/src/test/codegen/enum-bounds-check-derived-idx.rs new file mode 100644 index 00000000000..7e3773b6a3e --- /dev/null +++ b/src/test/codegen/enum-bounds-check-derived-idx.rs @@ -0,0 +1,25 @@ +// This test checks an optimization that is not guaranteed to work. This test case should not block +// a future LLVM update. +// compile-flags: -O +// min-llvm-version: 11.0 + +#![crate_type = "lib"] + +pub enum Bar { + A = 1, + B = 3, +} + +// CHECK-LABEL: @lookup_inc +#[no_mangle] +pub fn lookup_inc(buf: &[u8; 5], f: Bar) -> u8 { + // CHECK-NOT: panic_bounds_check + buf[f as usize + 1] +} + +// CHECK-LABEL: @lookup_dec +#[no_mangle] +pub fn lookup_dec(buf: &[u8; 5], f: Bar) -> u8 { + // CHECK-NOT: panic_bounds_check + buf[f as usize - 1] +} diff --git a/src/test/codegen/enum-bounds-check-issue-13926.rs b/src/test/codegen/enum-bounds-check-issue-13926.rs new file mode 100644 index 00000000000..ad029f0fa73 --- /dev/null +++ b/src/test/codegen/enum-bounds-check-issue-13926.rs @@ -0,0 +1,19 @@ +// This test checks an optimization that is not guaranteed to work. This test case should not block +// a future LLVM update. +// compile-flags: -O +// min-llvm-version: 11.0 + +#![crate_type = "lib"] + +#[repr(u8)] +pub enum Exception { + Low = 5, + High = 10, +} + +// CHECK-LABEL: @access +#[no_mangle] +pub fn access(array: &[usize; 12], exc: Exception) -> usize { + // CHECK-NOT: panic_bounds_check + array[(exc as u8 - 4) as usize] +} diff --git a/src/test/codegen/enum-bounds-check.rs b/src/test/codegen/enum-bounds-check.rs index 21a27c9f35d..17322d5911b 100644 --- a/src/test/codegen/enum-bounds-check.rs +++ b/src/test/codegen/enum-bounds-check.rs @@ -12,3 +12,15 @@ pub fn lookup(buf: &[u8; 2], f: Foo) -> u8 { // CHECK-NOT: panic_bounds_check buf[f as usize] } + +pub enum Bar { + A = 2, + B = 3 +} + +// CHECK-LABEL: @lookup_unmodified +#[no_mangle] +pub fn lookup_unmodified(buf: &[u8; 5], f: Bar) -> u8 { + // CHECK-NOT: panic_bounds_check + buf[f as usize] +} |
