error: expected identifier, found keyword `self`
  --> $DIR/import-self.rs:9:12
   |
LL | use foo as self;
   |            ^^^^ expected identifier, found keyword

error[E0429]: `self` imports are only allowed within a { } list
  --> $DIR/import-self.rs:12:8
   |
LL | use foo::self;
   |        ^^^^^^
   |
help: consider importing the module directly
   |
LL - use foo::self;
LL + use foo;
   |
help: alternatively, use the multi-path `use` syntax to import `self`
   |
LL | use foo::{self};
   |          +    +

error[E0255]: the name `foo` is defined multiple times
  --> $DIR/import-self.rs:6:11
   |
LL | mod foo {
   | ------- previous definition of the module `foo` here
...
LL | use foo::{self};
   |           ^^^^ `foo` reimported here
   |
   = note: `foo` must be defined only once in the type namespace of this module
help: you can use `as` to change the binding name of the import
   |
LL | use foo::{self as other_foo};
   |           ~~~~~~~~~~~~~~~~~

error[E0255]: the name `foo` is defined multiple times
  --> $DIR/import-self.rs:12:5
   |
LL | mod foo {
   | ------- previous definition of the module `foo` here
...
LL | use foo::self;
   |     ^^^^^^^^^ `foo` reimported here
   |
   = note: `foo` must be defined only once in the type namespace of this module
help: you can use `as` to change the binding name of the import
   |
LL | use foo as other_foo;
   |     ~~~~~~~~~~~~~~~~

error[E0252]: the name `A` is defined multiple times
  --> $DIR/import-self.rs:16:11
   |
LL | use foo::A;
   |     ------ previous import of the type `A` here
LL | use foo::{self as A};
   |           ^^^^^^^^^ `A` reimported here
   |
   = note: `A` must be defined only once in the type namespace of this module
help: you can use `as` to change the binding name of the import
   |
LL | use foo::{self as OtherA};
   |           ~~~~~~~~~~~~~~

error: aborting due to 5 previous errors

Some errors have detailed explanations: E0252, E0255, E0429.
For more information about an error, try `rustc --explain E0252`.
