about summary refs log tree commit diff
path: root/src/test/run-fail
diff options
context:
space:
mode:
authorCorey Richardson <corey@octayn.net>2015-01-06 00:56:30 -0500
committerFelix S. Klock II <pnkfelix@pnkfx.org>2015-03-03 12:09:07 +0100
commitcdfff9db35d037c51dfd5c2bac2174f651294adb (patch)
tree92ffb0978f93db6b8a74531b1f3abef2ab599e6f /src/test/run-fail
parent00ccc7af1eb9091de7f24edf9eacb3da119d5b27 (diff)
downloadrust-cdfff9db35d037c51dfd5c2bac2174f651294adb.tar.gz
rust-cdfff9db35d037c51dfd5c2bac2174f651294adb.zip
rustc: implement arithmetic overflow checking
Adds overflow checking to integer addition, multiplication, and subtraction
when `-Z force-overflow-checks` is true, or if `--cfg ndebug` is not passed to
the compiler. On overflow, it panics with `arithmetic operation overflowed`.
Also adds `overflowing_add`, `overflowing_sub`, and `overflowing_mul`
intrinsics for doing unchecked arithmetic.

[breaking-change]
Diffstat (limited to 'src/test/run-fail')
-rw-r--r--src/test/run-fail/overflowing-add.rs15
-rw-r--r--src/test/run-fail/overflowing-mul.rs15
-rw-r--r--src/test/run-fail/overflowing-sub.rs15
3 files changed, 45 insertions, 0 deletions
diff --git a/src/test/run-fail/overflowing-add.rs b/src/test/run-fail/overflowing-add.rs
new file mode 100644
index 00000000000..c3e41110d20
--- /dev/null
+++ b/src/test/run-fail/overflowing-add.rs
@@ -0,0 +1,15 @@
+// Copyright 2015 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.
+
+// error-pattern:thread '<main>' panicked at 'arithmatic operation overflowed'
+
+fn main() {
+    let x = 200u8 + 200u8 + 200u8;
+}
diff --git a/src/test/run-fail/overflowing-mul.rs b/src/test/run-fail/overflowing-mul.rs
new file mode 100644
index 00000000000..bf7a9d07586
--- /dev/null
+++ b/src/test/run-fail/overflowing-mul.rs
@@ -0,0 +1,15 @@
+// Copyright 2015 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.
+
+// error-pattern:thread '<main>' panicked at 'arithmatic operation overflowed'
+
+fn main() {
+    let x = 200u8 + 4u8;
+}
diff --git a/src/test/run-fail/overflowing-sub.rs b/src/test/run-fail/overflowing-sub.rs
new file mode 100644
index 00000000000..961b36d322c
--- /dev/null
+++ b/src/test/run-fail/overflowing-sub.rs
@@ -0,0 +1,15 @@
+// Copyright 2015 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.
+
+// error-pattern:thread '<main>' panicked at 'arithmatic operation overflowed'
+
+fn main() {
+    let x = 42u8 - 43u8;
+}