From d3c489c917c1086728001c94a98765e02171a201 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Tue, 26 Apr 2016 15:32:18 +0200 Subject: [PATCH] don't demote expressions just because const_eval fails this might introduce subtle bugs to code generation --- src/librustc_passes/consts.rs | 1 - src/test/compile-fail/const-err.rs | 5 +++++ src/test/compile-fail/const-err2.rs | 34 +++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/const-err2.rs diff --git a/src/librustc_passes/consts.rs b/src/librustc_passes/consts.rs index 9b71445270ac..1f9c40856fd1 100644 --- a/src/librustc_passes/consts.rs +++ b/src/librustc_passes/consts.rs @@ -498,7 +498,6 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> { Err(ConstEvalErr { kind: Math(ConstMathErr::Overflow(Op::Shl)), ..}) | Err(ConstEvalErr { kind: IndexOpFeatureGated, ..}) => {}, Err(msg) => { - self.qualif = self.qualif | ConstQualif::NOT_CONST; self.tcx.sess.add_lint(CONST_ERR, ex.id, msg.span, msg.description().into_owned()) diff --git a/src/test/compile-fail/const-err.rs b/src/test/compile-fail/const-err.rs index 816799eabf79..3fb9a3f236ce 100644 --- a/src/test/compile-fail/const-err.rs +++ b/src/test/compile-fail/const-err.rs @@ -8,8 +8,12 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// these errors are not actually "const_err", they occur in trans/consts +// and are unconditional warnings that can't be denied or allowed + #![feature(rustc_attrs)] #![allow(exceeding_bitshifts)] +#![allow(const_err)] fn black_box(_: T) { unimplemented!() @@ -21,6 +25,7 @@ fn main() { //~^ WARN attempted to negate with overflow let b = 200u8 + 200u8 + 200u8; //~^ WARN attempted to add with overflow + //~| WARN attempted to add with overflow let c = 200u8 * 4; //~^ WARN attempted to multiply with overflow let d = 42u8 - (42u8 + 1); diff --git a/src/test/compile-fail/const-err2.rs b/src/test/compile-fail/const-err2.rs new file mode 100644 index 000000000000..f0d65f1424c4 --- /dev/null +++ b/src/test/compile-fail/const-err2.rs @@ -0,0 +1,34 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(rustc_attrs)] +#![allow(exceeding_bitshifts)] +#![deny(const_err)] + +fn black_box(_: T) { + unimplemented!() +} + +fn main() { + let a = -std::i8::MIN; + //~^ ERROR attempted to negate with overflow + let b = 200u8 + 200u8 + 200u8; + //~^ ERROR attempted to add with overflow + //~| ERROR attempted to add with overflow + let c = 200u8 * 4; + //~^ ERROR attempted to multiply with overflow + let d = 42u8 - (42u8 + 1); + //~^ ERROR attempted to subtract with overflow + let _e = [5u8][1]; + black_box(a); + black_box(b); + black_box(c); + black_box(d); +}