mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
Promote unreachable code to being a lint attribute
This commit is contained in:
parent
237dce12c9
commit
aed53f9bf0
@ -96,6 +96,7 @@ pub enum lint {
|
||||
unnecessary_allocation,
|
||||
|
||||
missing_doc,
|
||||
unreachable_code,
|
||||
}
|
||||
|
||||
pub fn level_to_str(lv: level) -> &'static str {
|
||||
@ -273,6 +274,13 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[
|
||||
desc: "detects missing documentation for public members",
|
||||
default: allow
|
||||
}),
|
||||
|
||||
("unreachable_code",
|
||||
LintSpec {
|
||||
lint: unreachable_code,
|
||||
desc: "detects unreachable code",
|
||||
default: warn
|
||||
}),
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -81,6 +81,7 @@ use core::prelude::*;
|
||||
use middle::const_eval;
|
||||
use middle::pat_util::pat_id_map;
|
||||
use middle::pat_util;
|
||||
use middle::lint::unreachable_code;
|
||||
use middle::ty::{FnSig, VariantInfo_};
|
||||
use middle::ty::{ty_param_bounds_and_ty, ty_param_substs_and_ty};
|
||||
use middle::ty::{substs, param_ty};
|
||||
@ -2937,7 +2938,8 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt,
|
||||
let mut any_err = false;
|
||||
for blk.node.stmts.each |s| {
|
||||
check_stmt(fcx, *s);
|
||||
let s_ty = fcx.node_ty(ast_util::stmt_id(*s));
|
||||
let s_id = ast_util::stmt_id(*s);
|
||||
let s_ty = fcx.node_ty(s_id);
|
||||
if last_was_bot && !warned && match s.node {
|
||||
ast::stmt_decl(@codemap::spanned { node: ast::decl_local(_),
|
||||
_}, _) |
|
||||
@ -2946,7 +2948,8 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt,
|
||||
}
|
||||
_ => false
|
||||
} {
|
||||
fcx.ccx.tcx.sess.span_warn(s.span, "unreachable statement");
|
||||
fcx.ccx.tcx.sess.add_lint(unreachable_code, s_id, s.span,
|
||||
~"unreachable statement");
|
||||
warned = true;
|
||||
}
|
||||
if ty::type_is_bot(s_ty) {
|
||||
|
@ -9,13 +9,9 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
|
||||
fn f(caller: &str) {
|
||||
debug!(caller);
|
||||
let x: uint = 0u32; // induce type error //~ ERROR mismatched types
|
||||
}
|
||||
#[deny(unreachable_code)];
|
||||
|
||||
fn main() {
|
||||
return f("main");
|
||||
debug!("Paul is dead"); //~ WARNING unreachable
|
||||
return;
|
||||
debug!("Paul is dead"); //~ ERROR: unreachable
|
||||
}
|
||||
|
@ -8,11 +8,14 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#[deny(unreachable_code)];
|
||||
#[allow(unused_variable)];
|
||||
|
||||
fn fail_len(v: ~[int]) -> uint {
|
||||
let mut i = fail!();
|
||||
let mut i = 3;
|
||||
fail!();
|
||||
for v.each |x| { i += 1u; }
|
||||
//~^ WARNING unreachable statement
|
||||
//~^^ ERROR the type of this value must be known
|
||||
//~^ ERROR: unreachable statement
|
||||
return i;
|
||||
}
|
||||
fn main() {}
|
||||
|
@ -8,9 +8,11 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#[deny(unreachable_code)];
|
||||
|
||||
fn g() -> ! { fail!(); }
|
||||
fn f() -> ! {
|
||||
return 42i; //~ ERROR expected `!` but found `int`
|
||||
g(); //~ WARNING unreachable statement
|
||||
return g();
|
||||
g(); //~ ERROR: unreachable statement
|
||||
}
|
||||
fn main() { }
|
||||
|
@ -8,8 +8,10 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#[deny(unreachable_code)];
|
||||
|
||||
fn f() -> ! {
|
||||
return 42i; //~ ERROR expected `!` but found `int`
|
||||
fail!(); //~ WARNING unreachable statement
|
||||
return fail!();
|
||||
fail!(); //~ ERROR: unreachable statement
|
||||
}
|
||||
fn main() { }
|
||||
|
@ -13,7 +13,7 @@ fn foo() -> int {
|
||||
|
||||
while 1 != 2 {
|
||||
break;
|
||||
x = 0; //~ WARNING unreachable statement
|
||||
x = 0;
|
||||
}
|
||||
|
||||
debug!(x); //~ ERROR use of possibly uninitialized variable: `x`
|
||||
|
@ -13,7 +13,7 @@ fn foo() -> int {
|
||||
|
||||
loop {
|
||||
break;
|
||||
x = 0; //~ WARNING unreachable statement
|
||||
x = 0;
|
||||
}
|
||||
|
||||
debug!(x); //~ ERROR use of possibly uninitialized variable: `x`
|
||||
|
@ -8,9 +8,11 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// error-pattern:unreachable statement
|
||||
#[deny(unreachable_code)];
|
||||
#[allow(unused_variable)];
|
||||
|
||||
fn main() {
|
||||
loop{}
|
||||
// red herring to make sure compilation fails
|
||||
error!(42 == 'c');
|
||||
|
||||
let a = 3; //~ ERROR: unreachable statement
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user