error: unexpected token: `()`
 --> tests/ui/pin_project/invalid.rs:6:14
  |
6 |         #[pin()] //~ ERROR unexpected token
  |              ^^

error: unexpected token: `(foo)`
  --> tests/ui/pin_project/invalid.rs:11:29
   |
11 |     struct TupleStruct(#[pin(foo)] ()); //~ ERROR unexpected token
   |                             ^^^^^

error: unexpected token: `(foo)`
  --> tests/ui/pin_project/invalid.rs:15:16
   |
15 |         V(#[pin(foo)] ()), //~ ERROR unexpected token
   |                ^^^^^

error: unexpected token: `(foo)`
  --> tests/ui/pin_project/invalid.rs:21:18
   |
21 |             #[pin(foo)] //~ ERROR unexpected token
   |                  ^^^^^

error: duplicate #[pin] attribute
  --> tests/ui/pin_project/invalid.rs:33:9
   |
33 |         #[pin] //~ ERROR duplicate #[pin] attribute
   |         ^^^^^^

error: duplicate #[pin] attribute
  --> tests/ui/pin_project/invalid.rs:40:9
   |
40 |         #[pin]
   |         ^^^^^^

error: duplicate #[pin] attribute
  --> tests/ui/pin_project/invalid.rs:49:13
   |
49 |             #[pin]
   |             ^^^^^^

error: duplicate #[pin] attribute
  --> tests/ui/pin_project/invalid.rs:59:13
   |
59 |             #[pin] //~ ERROR duplicate #[pin] attribute
   |             ^^^^^^

error: #[pin] attribute may only be used on fields of structs or variants
  --> tests/ui/pin_project/invalid.rs:69:5
   |
69 |     #[pin] //~ ERROR may only be used on fields of structs or variants
   |     ^^^^^^

error: #[pin] attribute may only be used on fields of structs or variants
  --> tests/ui/pin_project/invalid.rs:77:9
   |
77 |         #[pin] //~ ERROR may only be used on fields of structs or variants
   |         ^^^^^^

error: #[pin] attribute may only be used on fields of structs or variants
  --> tests/ui/pin_project/invalid.rs:82:5
   |
82 |     #[pin] //~ ERROR may only be used on fields of structs or variants
   |     ^^^^^^

error: `Replace` argument was removed, use `project_replace` argument instead
  --> tests/ui/pin_project/invalid.rs:91:19
   |
91 |     #[pin_project(Replace)] //~ ERROR `Replace` argument was removed, use `project_replace` argument instead
   |                   ^^^^^^^

error: expected identifier
  --> tests/ui/pin_project/invalid.rs:94:31
   |
94 |     #[pin_project(UnsafeUnpin,,)] //~ ERROR expected identifier
   |                               ^

error: unexpected argument: Foo
  --> tests/ui/pin_project/invalid.rs:97:19
   |
97 |     #[pin_project(Foo)] //~ ERROR unexpected argument
   |                   ^^^

error: expected identifier
   --> tests/ui/pin_project/invalid.rs:100:19
    |
100 |     #[pin_project(,UnsafeUnpin)] //~ ERROR expected identifier
    |                   ^

error: expected `,`
   --> tests/ui/pin_project/invalid.rs:106:30
    |
106 |     #[pin_project(PinnedDrop PinnedDrop)] //~ ERROR expected `,`
    |                              ^^^^^^^^^^

error: duplicate `PinnedDrop` argument
   --> tests/ui/pin_project/invalid.rs:109:31
    |
109 |     #[pin_project(PinnedDrop, PinnedDrop)] //~ ERROR duplicate `PinnedDrop` argument
    |                               ^^^^^^^^^^

error: duplicate `UnsafeUnpin` argument
   --> tests/ui/pin_project/invalid.rs:112:32
    |
112 |     #[pin_project(UnsafeUnpin, UnsafeUnpin)] //~ ERROR duplicate `UnsafeUnpin` argument
    |                                ^^^^^^^^^^^

error: duplicate `!Unpin` argument
   --> tests/ui/pin_project/invalid.rs:115:27
    |
115 |     #[pin_project(!Unpin, !Unpin)] //~ ERROR duplicate `!Unpin` argument
    |                           ^^^^^^

error: duplicate `UnsafeUnpin` argument
   --> tests/ui/pin_project/invalid.rs:118:44
    |
118 |     #[pin_project(PinnedDrop, UnsafeUnpin, UnsafeUnpin)] //~ ERROR duplicate `UnsafeUnpin` argument
    |                                            ^^^^^^^^^^^

error: duplicate `PinnedDrop` argument
   --> tests/ui/pin_project/invalid.rs:121:44
    |
121 |     #[pin_project(PinnedDrop, UnsafeUnpin, PinnedDrop, UnsafeUnpin)] //~ ERROR duplicate `PinnedDrop` argument
    |                                            ^^^^^^^^^^

error: duplicate `project` argument
   --> tests/ui/pin_project/invalid.rs:124:32
    |
124 |     #[pin_project(project = A, project = B)] //~ ERROR duplicate `project` argument
    |                                ^^^^^^^^^^^

error: duplicate `project` argument
   --> tests/ui/pin_project/invalid.rs:127:49
    |
127 |     #[pin_project(project = A, project_ref = A, project = B)] //~ ERROR duplicate `project` argument
    |                                                 ^^^^^^^^^^^

error: duplicate `project_ref` argument
   --> tests/ui/pin_project/invalid.rs:130:36
    |
130 |     #[pin_project(project_ref = A, project_ref = B)] //~ ERROR duplicate `project_ref` argument
    |                                    ^^^^^^^^^^^^^^^

error: duplicate `project_replace` argument
   --> tests/ui/pin_project/invalid.rs:133:40
    |
133 |     #[pin_project(project_replace = A, project_replace = B)] //~ ERROR duplicate `project_replace` argument
    |                                        ^^^^^^^^^^^^^^^^^^^

error: duplicate `project_replace` argument
   --> tests/ui/pin_project/invalid.rs:136:36
    |
136 |     #[pin_project(project_replace, project_replace = B)] //~ ERROR duplicate `project_replace` argument
    |                                    ^^^^^^^^^^^^^^^^^^^

error: duplicate `project_replace` argument
   --> tests/ui/pin_project/invalid.rs:139:40
    |
139 |     #[pin_project(project_replace = A, project_replace)] //~ ERROR duplicate `project_replace` argument
    |                                        ^^^^^^^^^^^^^^^

error: arguments `PinnedDrop` and `project_replace` are mutually exclusive
   --> tests/ui/pin_project/invalid.rs:145:19
    |
145 |     #[pin_project(PinnedDrop, project_replace)] //~ ERROR arguments `PinnedDrop` and `project_replace` are mutually exclusive
    |                   ^^^^^^^^^^

error: arguments `PinnedDrop` and `project_replace` are mutually exclusive
   --> tests/ui/pin_project/invalid.rs:148:49
    |
148 |     #[pin_project(project_replace, UnsafeUnpin, PinnedDrop)] //~ ERROR arguments `PinnedDrop` and `project_replace` are mutually exclusive
    |                                                 ^^^^^^^^^^

error: arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive
   --> tests/ui/pin_project/invalid.rs:151:19
    |
151 |     #[pin_project(UnsafeUnpin, !Unpin)] //~ ERROR arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive
    |                   ^^^^^^^^^^^

error: arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive
   --> tests/ui/pin_project/invalid.rs:154:39
    |
154 |     #[pin_project(!Unpin, PinnedDrop, UnsafeUnpin)] //~ ERROR arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive
    |                                       ^^^^^^^^^^^

error: expected `!Unpin`, found `!`
   --> tests/ui/pin_project/invalid.rs:157:19
    |
157 |     #[pin_project(!)] //~ ERROR expected `!Unpin`, found `!`
    |                   ^

error: unexpected argument: Unpin
   --> tests/ui/pin_project/invalid.rs:160:19
    |
160 |     #[pin_project(Unpin)] //~ ERROR unexpected argument
    |                   ^^^^^

error: expected `project = <identifier>`, found `project`
   --> tests/ui/pin_project/invalid.rs:163:19
    |
163 |     #[pin_project(project)] //~ ERROR expected `project = <identifier>`, found `project`
    |                   ^^^^^^^

error: expected `project = <identifier>`, found `project =`
   --> tests/ui/pin_project/invalid.rs:166:19
    |
166 |     #[pin_project(project = )] //~ ERROR expected `project = <identifier>`, found `project =`
    |                   ^^^^^^^^^

error: expected identifier
   --> tests/ui/pin_project/invalid.rs:169:29
    |
169 |     #[pin_project(project = !)] //~ ERROR expected identifier
    |                             ^

error: expected `project_ref = <identifier>`, found `project_ref`
   --> tests/ui/pin_project/invalid.rs:172:19
    |
172 |     #[pin_project(project_ref)] //~ ERROR expected `project_ref = <identifier>`, found `project_ref`
    |                   ^^^^^^^^^^^

error: expected `project_ref = <identifier>`, found `project_ref =`
   --> tests/ui/pin_project/invalid.rs:175:19
    |
175 |     #[pin_project(project_ref = )] //~ ERROR expected `project_ref = <identifier>`, found `project_ref =`
    |                   ^^^^^^^^^^^^^

error: expected identifier
   --> tests/ui/pin_project/invalid.rs:178:33
    |
178 |     #[pin_project(project_ref = !)] //~ ERROR expected identifier
    |                                 ^

error: expected `project_replace = <identifier>`, found `project_replace =`
   --> tests/ui/pin_project/invalid.rs:184:19
    |
184 |     #[pin_project(project_replace = )] //~ ERROR expected `project_replace = <identifier>`, found `project_replace =`
    |                   ^^^^^^^^^^^^^^^^^

error: expected identifier
   --> tests/ui/pin_project/invalid.rs:187:37
    |
187 |     #[pin_project(project_replace = !)] //~ ERROR expected identifier
    |                                     ^

error: `project_replace` argument requires a value when used on enums
   --> tests/ui/pin_project/invalid.rs:190:19
    |
190 |     #[pin_project(project_replace)] //~ ERROR `project_replace` argument requires a value when used on enums
    |                   ^^^^^^^^^^^^^^^

error: name `OrigAndProj` is the same as the original type name
   --> tests/ui/pin_project/invalid.rs:199:29
    |
199 |     #[pin_project(project = OrigAndProj)] //~ ERROR name `OrigAndProj` is the same as the original type name
    |                             ^^^^^^^^^^^

error: name `OrigAndProjRef` is the same as the original type name
   --> tests/ui/pin_project/invalid.rs:202:33
    |
202 |     #[pin_project(project_ref = OrigAndProjRef)] //~ ERROR name `OrigAndProjRef` is the same as the original type name
    |                                 ^^^^^^^^^^^^^^

error: name `OrigAndProjOwn` is the same as the original type name
   --> tests/ui/pin_project/invalid.rs:205:37
    |
205 |     #[pin_project(project_replace = OrigAndProjOwn)] //~ ERROR name `OrigAndProjOwn` is the same as the original type name
    |                                     ^^^^^^^^^^^^^^

error: name `A` is already specified by `project` argument
   --> tests/ui/pin_project/invalid.rs:208:46
    |
208 |     #[pin_project(project = A, project_ref = A)] //~ ERROR name `A` is already specified by `project` argument
    |                                              ^

error: name `A` is already specified by `project` argument
   --> tests/ui/pin_project/invalid.rs:211:50
    |
211 |     #[pin_project(project = A, project_replace = A)] //~ ERROR name `A` is already specified by `project` argument
    |                                                  ^

error: name `A` is already specified by `project_ref` argument
   --> tests/ui/pin_project/invalid.rs:214:54
    |
214 |     #[pin_project(project_ref = A, project_replace = A)] //~ ERROR name `A` is already specified by `project_ref` argument
    |                                                      ^

error: duplicate #[pin_project] attribute
   --> tests/ui/pin_project/invalid.rs:222:5
    |
222 |     #[pin_project] //~ ERROR duplicate #[pin_project] attribute
    |     ^^^^^^^^^^^^^^

error: #[pin_project] attribute may not be used on structs with zero fields
   --> tests/ui/pin_project/invalid.rs:230:19
    |
230 |     struct Struct {} //~ ERROR may not be used on structs with zero fields
    |                   ^^

error: #[pin_project] attribute may not be used on structs with zero fields
   --> tests/ui/pin_project/invalid.rs:233:23
    |
233 |     struct TupleStruct(); //~ ERROR may not be used on structs with zero fields
    |                       ^^

error: #[pin_project] attribute may not be used on structs with zero fields
   --> tests/ui/pin_project/invalid.rs:236:12
    |
236 |     struct UnitStruct; //~ ERROR may not be used on structs with zero fields
    |            ^^^^^^^^^^

error: #[pin_project] attribute may not be used on enums without variants
   --> tests/ui/pin_project/invalid.rs:239:20
    |
239 |     enum EnumEmpty {} //~ ERROR may not be used on enums without variants
    |                    ^^

error: #[pin_project] attribute may not be used on enums with discriminants
   --> tests/ui/pin_project/invalid.rs:243:13
    |
243 |         V = 2, //~ ERROR may not be used on enums with discriminants
    |             ^

error: #[pin_project] attribute may not be used on enums with zero fields
   --> tests/ui/pin_project/invalid.rs:248:9
    |
248 | /         Unit, //~ ERROR may not be used on enums with zero fields
249 | |         Tuple(),
250 | |         Struct {},
    | |__________________^

error: #[pin_project] attribute may only be used on structs or enums
   --> tests/ui/pin_project/invalid.rs:254:5
    |
254 | /     union Union {
255 | |         //~^ ERROR may only be used on structs or enums
256 | |         f: (),
257 | |     }
    | |_____^

error: #[pin_project] attribute may only be used on structs or enums
   --> tests/ui/pin_project/invalid.rs:260:5
    |
260 |     impl Impl {} //~ ERROR may only be used on structs or enums
    |     ^^^^^^^^^^^^

error: #[pin_project] attribute may not be used on #[repr(packed)] types
   --> tests/ui/pin_project/invalid.rs:268:12
    |
268 |     #[repr(packed)]
    |            ^^^^^^

error: #[pin_project] attribute may not be used on #[repr(packed)] types
   --> tests/ui/pin_project/invalid.rs:272:12
    |
272 |     #[repr(packed)]
    |            ^^^^^^

error: #[pin_project] attribute may not be used on #[repr(packed)] types
   --> tests/ui/pin_project/invalid.rs:276:12
    |
276 |     #[repr(packed)]
    |            ^^^^^^
