]> git.lizzy.rs Git - rust.git/commitdiff
Handle divide by zero in constant evaluator
authorSeo Sanghyeon <sanxiyn@gmail.com>
Wed, 23 Jan 2013 06:07:00 +0000 (15:07 +0900)
committerSeo Sanghyeon <sanxiyn@gmail.com>
Wed, 23 Jan 2013 06:07:00 +0000 (15:07 +0900)
src/librustc/middle/const_eval.rs
src/test/compile-fail/eval-enum.rs [new file with mode: 0644]

index 530e63acf5710fa59633aefaed356afd78c80770..3b9b0348615d649db7840f305ac77ff46b95e751 100644 (file)
@@ -295,7 +295,9 @@ fn fromb(b: bool) -> Result<const_val, ~str> { Ok(const_int(b as i64)) }
               add => Ok(const_int(a + b)),
               subtract => Ok(const_int(a - b)),
               mul => Ok(const_int(a * b)),
+              div if b == 0 => Err(~"divide by zero"),
               div => Ok(const_int(a / b)),
+              rem if b == 0 => Err(~"modulo zero"),
               rem => Ok(const_int(a % b)),
               and | bitand => Ok(const_int(a & b)),
               or | bitor => Ok(const_int(a | b)),
@@ -315,7 +317,9 @@ fn fromb(b: bool) -> Result<const_val, ~str> { Ok(const_int(b as i64)) }
               add => Ok(const_uint(a + b)),
               subtract => Ok(const_uint(a - b)),
               mul => Ok(const_uint(a * b)),
+              div if b == 0 => Err(~"divide by zero"),
               div => Ok(const_uint(a / b)),
+              rem if b == 0 => Err(~"modulo zero"),
               rem => Ok(const_uint(a % b)),
               and | bitand => Ok(const_uint(a & b)),
               or | bitor => Ok(const_uint(a | b)),
diff --git a/src/test/compile-fail/eval-enum.rs b/src/test/compile-fail/eval-enum.rs
new file mode 100644 (file)
index 0000000..d8443f8
--- /dev/null
@@ -0,0 +1,6 @@
+enum test {
+    div_zero = 1/0, //~ERROR expected constant: divide by zero
+    rem_zero = 1%0  //~ERROR expected constant: modulo zero
+}
+
+fn main() {}