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


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:


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
  • “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 . If this is causing too many regressions, we could probably make it a soft error.

pinyin is being tracked at .

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());


The glib regression is .

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


For pinyin, the affected code looks like:

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

The error is:

src/ 157:29 error: cannot infer an appropriate lifetime for lifetime parameter `'t` due to conflicting req
uirements [E0495]                                                                                                       
src/         let cap =;                                                                   

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?


I documented the pinyin regression at - 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.


maidsafe_utilities is because raw_pointer_derive was removed.


The tcod regression is on 1.5 stable: