error[E0308]: mismatched types
  --> $DIR/issue-38371.rs:4:8
   |
LL | fn foo(&foo: Foo) {
   |        ^^^^-----
   |        |     |
   |        |     expected due to this
   |        expected struct `Foo`, found reference
   |        help: did you mean `foo`: `&Foo`
   |
   = note: expected struct `Foo`
           found reference `&_`

error[E0308]: mismatched types
  --> $DIR/issue-38371.rs:18:9
   |
LL | fn agh(&&bar: &u32) {
   |         ^^^^  ---- expected due to this
   |         |
   |         expected `u32`, found reference
   |         help: you can probably remove the explicit borrow: `bar`
   |
   = note:   expected type `u32`
           found reference `&_`

error[E0308]: mismatched types
  --> $DIR/issue-38371.rs:21:8
   |
LL | fn bgh(&&bar: u32) {
   |        ^^^^^  --- expected due to this
   |        |
   |        expected `u32`, found reference
   |
   = note:   expected type `u32`
           found reference `&_`

error[E0529]: expected an array or slice, found `u32`
  --> $DIR/issue-38371.rs:24:9
   |
LL | fn ugh(&[bar]: &u32) {
   |         ^^^^^ pattern cannot match with input type `u32`

error: aborting due to 4 previous errors

Some errors have detailed explanations: E0308, E0529.
For more information about an error, try `rustc --explain E0308`.
