about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorFalco Hirschenberger <falco.hirschenberger@gmail.com>2014-11-01 09:10:02 +0100
committerFalco Hirschenberger <falco.hirschenberger@gmail.com>2014-11-01 09:10:10 +0100
commite5058a8f0c8b9ad6dbfe53fb8b84e636db501ae2 (patch)
tree9b9a6e0125ac8c174ed95419db9ebb67130fe4e5 /src/test
parent51a25c7f96ad0d00836314d705e3f0a477562a2c (diff)
downloadrust-e5058a8f0c8b9ad6dbfe53fb8b84e636db501ae2.tar.gz
rust-e5058a8f0c8b9ad6dbfe53fb8b84e636db501ae2.zip
Add lint for checking exceeding bitshifts #17713
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/huge-array-simple.rs2
-rw-r--r--src/test/compile-fail/lint-exceeding-bitshifts.rs58
2 files changed, 59 insertions, 1 deletions
diff --git a/src/test/compile-fail/huge-array-simple.rs b/src/test/compile-fail/huge-array-simple.rs
index b23d0716e6d..17f85c7bd2b 100644
--- a/src/test/compile-fail/huge-array-simple.rs
+++ b/src/test/compile-fail/huge-array-simple.rs
@@ -11,5 +11,5 @@
 // error-pattern: too big for the current
 
 fn main() {
-   let fat : [u8, ..(1<<61)+(1<<31)] = [0, ..(1<<61)+(1<<31)];
+   let fat : [u8, ..(1<<61)+(1<<31)] = [0, ..(1u64<<61) as uint +(1u64<<31) as uint];
 }
diff --git a/src/test/compile-fail/lint-exceeding-bitshifts.rs b/src/test/compile-fail/lint-exceeding-bitshifts.rs
new file mode 100644
index 00000000000..f270994bd38
--- /dev/null
+++ b/src/test/compile-fail/lint-exceeding-bitshifts.rs
@@ -0,0 +1,58 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![deny(exceeding_bitshifts)]
+#![allow(unused_variables)]
+
+fn main() {
+      let n = 1u8 << 8;
+      let n = 1u8 << 9;   //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1u16 << 16;
+      let n = 1u16 << 17; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1u32 << 32;
+      let n = 1u32 << 33; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1u64 << 64;
+      let n = 1u64 << 65; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i8 << 8;
+      let n = 1i8 << 9;   //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i16 << 16;
+      let n = 1i16 << 17; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i32 << 32;
+      let n = 1i32 << 33; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i64 << 64;
+      let n = 1i64 << 65; //~ ERROR: bitshift exceeds the type's number of bits
+
+      let n = 1u8 >> 8;
+      let n = 1u8 >> 9;   //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1u16 >> 16;
+      let n = 1u16 >> 17; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1u32 >> 32;
+      let n = 1u32 >> 33; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1u64 >> 64;
+      let n = 1u64 >> 65; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i8 >> 8;
+      let n = 1i8 >> 9;   //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i16 >> 16;
+      let n = 1i16 >> 17; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i32 >> 32;
+      let n = 1i32 >> 33; //~ ERROR: bitshift exceeds the type's number of bits
+      let n = 1i64 >> 64;
+      let n = 1i64 >> 65; //~ ERROR: bitshift exceeds the type's number of bits
+
+      let n = 1u8;
+      let n = n << 8;
+      let n = n << 9; //~ ERROR: bitshift exceeds the type's number of bits
+
+      let n = 1u8 << -9; //~ ERROR: bitshift exceeds the type's number of bits
+
+      let n = 1u8 << (4+4);
+      let n = 1u8 << (4+5); //~ ERROR: bitshift exceeds the type's number of bits
+}
+