}
/// Report lifetime/lifetime shadowing as an error.
-pub fn signal_lifetime_shadowing(
- sess: &Session,
- orig: Ident,
- shadower: Ident,
- orig_is_param: bool,
-) {
- let mut err = if orig_is_param {
- struct_span_err!(
- sess,
- shadower.span,
- E0263,
- "lifetime name `{}` declared twice in the same scope",
- orig.name,
- )
- } else {
- struct_span_err!(
- sess,
- shadower.span,
- E0496,
- "lifetime name `{}` shadows a lifetime name that is already in scope",
- orig.name,
- )
- };
+pub fn signal_lifetime_shadowing(sess: &Session, orig: Ident, shadower: Ident) {
+ let mut err = struct_span_err!(
+ sess,
+ shadower.span,
+ E0496,
+ "lifetime name `{}` shadows a lifetime name that is already in scope",
+ orig.name,
+ );
err.span_label(orig.span, "first declared here");
err.span_label(shadower.span, format!("lifetime `{}` already in scope", orig.name));
err.emit();
}
-/// Shadowing involving a label is only a warning, due to issues with
-/// labels and lifetimes not being macro-hygienic.
-pub fn signal_label_shadowing(sess: &Session, orig: Ident, shadower: Ident) {
+/// Shadowing involving a label is only a warning for historical reasons.
+//FIXME: make this a proper lint.
+pub fn signal_label_shadowing(sess: &Session, orig: Span, shadower: Ident) {
+ let name = shadower.name;
+ let shadower = shadower.span;
let mut err = sess.struct_span_warn(
- shadower.span,
- &format!("label name `{}` shadows a label name that is already in scope", orig.name),
+ shadower,
+ &format!("label name `{}` shadows a label name that is already in scope", name),
);
- err.span_label(orig.span, "first declared here");
- err.span_label(shadower.span, format!("label `{}` already in scope", orig.name));
+ err.span_label(orig, "first declared here");
+ err.span_label(shadower, format!("label `{}` already in scope", name));
err.emit();
}