<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/107368>107368</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang emit-ast hangs on objc code
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          danix800
      </td>
    </tr>
</table>

<pre>
    ```c
@class NSString;

@protocol NSObject
@end

@protocol NSCoding
@end

@interface NSObject <NSObject> {}
@end

@interface NSResponder : NSObject <NSCoding> {}
@end

@interface NSWindow : NSResponder <NSCoding> {}
@end

@implementation NSWindow (CheckCoordinates)
- (NSString *) checkCoordinates { return (void *)0; }
@end

@interface NSWindow (CheckCoordinates)
- (NSString *) checkCoordinates;
@end
```

```
clang -emit-ast -o test.ast test.m
```

godbolt: https://godbolt.org/z/hT3G9Ke7j

https://github.com/llvm/llvm-project/blob/main/clang/lib/AST/DeclBase.cpp#L582-L586

seems the loop never returns.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVN2OmzwQfZrhxkpkhhDggov8fHwXXW2lZqVeG3sAb42NsJP-PH1FlmSzK23VqBISlufMmTNzRhbe69YSlZBuId1H4hg6N5ZKWP0j5zyqnfpZwpq_fBL4HvgGVlwa4T17PBzCqG0LyXaOXOLD6IKTzrDHw-f6mWS4Rsiqj7E7pya6j7HaBhobIelKzCDZXYsk_zHItpDt_5LiC_nBWUUjg2TzjnLWci_lV22V-z7z3fLfSdkPhnqyQQTt7A0v5ruO5Ledc6PSVgTygMVL2mKKXjxhgBvAgsl36Kk0GykcRzvBT06rGcoh2bL7G_1XQa_Lc1vxsnJvBLy9lEbYli2o12EhfGALxwL5sJzO50P_B67WqdqZMNnUhTB4SDaAFWA1B5ZubAGrX4BV95T8X3yi7Pk2_12SDt2xXkrXA1bGnC6_xTC682JiVRtXA1a90BawOmufQHq63ByeAKs9SbMVnpZyGACThzTHxUOar2_LeqLes9ARM84NzNKJxtlNv4xUmagiKUREZZxhmmKG6zzqyiars7xJG4xriXnTqPWa4hWhWud1Eyd5pEvkuOIFT3nBs1W-LIokjoVc8TivEZt08qYX2iynrqbZRNr7I5Uxz5J1HhlRk_HnRwRx7g2n92Qsz2Ooj62HFTfaB_9KEXQwVL7YeHWxE7b1zFnm6mfJpFMUHUdT3j3vsz4PWM0STyX-DgAA___JqHQQ">