Regression report stable-2015-10-29 vs. beta-2015-11-05 vs nightly-2015-11-19


#1

stable-2015-10-29 vs. beta-2015-11-05.

stable-2015-10-29 vs. nightly-2015-11-19.

Beta root regressions, sorted by rank:

Nightly root regressions, sorted by rank:

Analysis

I’ve only given a brief look at the betas, not nightlies.

  • “unnecessary parens around for head expression” - nanovg. lint change
  • “attribute should be applied to struct or enum” - cudd-sys. bug fix?
  • “cannot infer appropriate lifetime” - pinyin. what’s this?
  • “type annotations required” - fastcgi. what’s this?
  • “attribute should be applied to function” - ao. similar bug fix to cudd-sys

Anybody know offhand what caused these?

cc @nikomatsakis there are two typecheck failures here.


Regression report stable-2015-12-10 vs. beta-2015-12-10
#2
  • “attribute should be applied to struct or enum”
  • “attribute should be applied to function”

Yes; we were missing a check to make sure the attribute wasn’t just being ignored. See https://github.com/rust-lang/rust/pull/28650 . If this is causing too many regressions, we could probably make it a soft error.

pinyin is being tracked at https://github.com/rust-lang/rust/issues/28853 .

Not sure what the fastcgi regression is; I think it reduces to this:

use std::io::{Read, Cursor};
fn main() {
    let x = Vec::new();
    let _x: &mut Read = &mut Cursor::new(x.as_ref());
}

#3

The glib regression is https://github.com/rust-lang/rust/issues/29857 .

tcod is getting hit by the new AsRef implementation on Box.


#4

For pinyin, the affected code looks like:

    let py = re_phonetic_symbol.replace_all(&p, |caps: &Captures| {
        let cap = caps.at(0).unwrap();
        let symbol = match PHONETIC_SYMBOL_MAP.get(&cap) {
            Some(&v) => v,
            None => "",
        };

The error is:

src/lib.rs:157:24: 157:29 error: cannot infer an appropriate lifetime for lifetime parameter `'t` due to conflicting req
uirements [E0495]                                                                                                       
src/lib.rs:157         let cap = caps.at(0).unwrap();                                                                   
                                      ^~~~~                                                                             

Captures is: impl<'t> Captures<'t>

And the method has signature: fn at(&self, i: usize) -> Option<&'t str>

Something must have changed in how the explicit type caps: &Captures in the closure is treated?

I’ve submitted a PR to fix the crate by a very simple change, cap instead of &cap (PR). So, why does this work?


#5

I documented the pinyin regression at https://github.com/rust-lang/rust/issues/28854 - this is an unfortunate interaction of “bridge” impls causing a deref coercion to be skipped and the lack of subtyping in trait matching - the code used to work because of a soundness hole.


#6

maidsafe_utilities is because raw_pointer_derive was removed.


#7

The tcod regression is on 1.5 stable: https://github.com/rust-lang/rust/issues/30744