use syntax::{abi, ast};
use syntax::attr::{self, AttrMetaMethods};
use syntax::codemap::{self, Span};
-use syntax::feature_gate::{KNOWN_ATTRIBUTES, AttributeType};
+use syntax::feature_gate::{KNOWN_ATTRIBUTES, AttributeType, emit_feature_err, GateIssue};
use syntax::ast::{TyIs, TyUs, TyI8, TyU8, TyI16, TyU16, TyI32, TyU32, TyI64, TyU64};
use syntax::ptr::P;
fn check_unsigned_negation_feature(cx: &LateContext, span: Span) {
if !cx.sess().features.borrow().negate_unsigned {
- // FIXME(#27141): change this to syntax::feature_gate::emit_feature_err…
- cx.sess().span_warn(span,
- "unary negation of unsigned integers will be feature gated in the future");
- // …and remove following two expressions.
- if option_env!("CFG_DISABLE_UNSTABLE_FEATURES").is_some() { return; }
- cx.sess().fileline_help(span, "add #![feature(negate_unsigned)] to the \
- crate attributes to enable the gate in advance");
+ emit_feature_err(
+ &cx.sess().parse_sess.span_diagnostic,
+ "negate_unsigned",
+ span,
+ GateIssue::Language,
+ "unary negation of unsigned integers may be removed in the future");
}
}
}
i += 2;
}
- res.push(cur_byte^-1);
+ res.push(cur_byte^!0);
}
}
--- /dev/null
+// 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.
+
+// Test that negating unsigned integers is gated by `negate_unsigned` feature
+// gate
+
+struct S;
+impl std::ops::Neg for S {
+ type Output = u32;
+ fn neg(self) -> u32 { 0 }
+}
+
+const _MAX: usize = -1;
+//~^ ERROR unary negation of unsigned integers may be removed in the future
+
+fn main() {
+ let a = -1;
+ //~^ ERROR unary negation of unsigned integers may be removed in the future
+ let _b : u8 = a; // for infering variable a to u8.
+
+ -a;
+ //~^ ERROR unary negation of unsigned integers may be removed in the future
+
+ let _d = -1u8;
+ //~^ ERROR unary negation of unsigned integers may be removed in the future
+
+ for _ in -10..10u8 {}
+ //~^ ERROR unary negation of unsigned integers may be removed in the future
+
+ -S; // should not trigger the gate; issue 26840
+}
+++ /dev/null
-// 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.
-
-// Test that negating unsigned integers is gated by `negate_unsigned` feature
-// gate
-
-struct S;
-impl std::ops::Neg for S {
- type Output = u32;
- fn neg(self) -> u32 { 0 }
-}
-
-const _MAX: usize = -1;
-//~^ WARN unary negation of unsigned integers will be feature gated in the future
-
-fn main() {
- let a = -1;
- //~^ WARN unary negation of unsigned integers will be feature gated in the future
- let _b : u8 = a; // for infering variable a to u8.
-
- -a;
- //~^ WARN unary negation of unsigned integers will be feature gated in the future
-
- let _d = -1u8;
- //~^ WARN unary negation of unsigned integers will be feature gated in the future
-
- for _ in -10..10u8 {}
- //~^ WARN unary negation of unsigned integers will be feature gated in the future
-
- -S; // should not trigger the gate; issue 26840
-}
// option. This file may not be copied, modified, or distributed
// except according to those terms.
+#![feature(negate_unsigned)]
+
pub fn main() {
let a = 1;
let a_neg: i8 = -a;