diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs index 1b03567aec5b..88d0fcfb6c7f 100644 --- a/src/comp/driver/session.rs +++ b/src/comp/driver/session.rs @@ -102,6 +102,11 @@ state obj session(ast::crate_num cnum, emit_diagnostic(sp, msg, "warning", 11u8, cm); } + fn span_note(span sp, str msg) { + // FIXME: Use constants, but rustboot doesn't know how to export them. + emit_diagnostic(sp, msg, "note", 10u8, cm); + } + fn bug(str msg) { log_err #fmt("error: internal compiler error %s", msg); fail; diff --git a/src/comp/middle/tstate/ck.rs b/src/comp/middle/tstate/ck.rs index af2455c9a6e5..f9e8416a3225 100644 --- a/src/comp/middle/tstate/ck.rs +++ b/src/comp/middle/tstate/ck.rs @@ -141,9 +141,11 @@ fn check_states_against_conditions(&fn_ctxt fcx, &_fn f, &ann a) -> () { /* fcx.ccx.tcx.sess.span_err(f.body.span, "Function " + fcx.name + " may not return. Its declared return type is " + util.common.ty_to_str(*f.decl.output)); */ - log_err("WARNING: Function " + - fcx.name + " may not return. Its declared return type is " - + ty_to_str(*f.decl.output)); + fcx.ccx.tcx.sess.span_warn(f.body.span, "not all control paths " + + "return a value"); + fcx.ccx.tcx.sess.span_note(f.decl.output.span, + "see declared return type of '" + ty_to_str(*f.decl.output) + + "'"); } }