error: it is currently not sound to use lifetimes in function signatures
 --> ui-tests/invalid-imports.rs:7:16
  |
7 |     fn f() -> &'static u32;
  |                ^^^^^^^

error: imported methods must have at least one argument
  --> ui-tests/invalid-imports.rs:10:5
   |
10 |     fn f1();
   |     ^^^^^^^^

error: first argument of method must be a shared reference
  --> ui-tests/invalid-imports.rs:12:14
   |
12 |     fn f2(x: u32);
   |              ^^^

error: first argument of method must be a path
  --> ui-tests/invalid-imports.rs:14:15
   |
14 |     fn f3(x: &&u32);
   |               ^^^^

error: paths with type parameters are not supported yet
  --> ui-tests/invalid-imports.rs:20:15
   |
20 |     fn f4(x: &Bar<T>);
   |               ^^^^^^

error: first argument of method must be a path
  --> ui-tests/invalid-imports.rs:22:15
   |
22 |     fn f4(x: &dyn Fn(T));
   |               ^^^^^^^^^

error: constructor returns must be bare types
  --> ui-tests/invalid-imports.rs:25:5
   |
25 |     fn f();
   |     ^^^^^^^

error: return value of constructor must be a bare path
  --> ui-tests/invalid-imports.rs:29:5
   |
29 |     fn f() -> &Bar;
   |     ^^^^^^^^^^^^^^^

error: must be Result<...>
  --> ui-tests/invalid-imports.rs:32:15
   |
32 |     fn f() -> u32;
   |               ^^^

error: must be Result<...>
  --> ui-tests/invalid-imports.rs:34:15
   |
34 |     fn f() -> &u32;
   |               ^^^^

error: must have at least one generic parameter
  --> ui-tests/invalid-imports.rs:36:15
   |
36 |     fn f() -> Result<>;
   |               ^^^^^^^^

error: it is currently not sound to use lifetimes in function signatures
  --> ui-tests/invalid-imports.rs:38:22
   |
38 |     fn f() -> Result<'a>;
   |                      ^^
