<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJytVMlu2zAQ_RrqMoggS5aXgw6JnQAGihZtgLZXShzLbCiSIKko_vsOaWdt0BxagaKW4SzvzdIacWxu5WAV-gD4wOMb7KDjGjozIIwWJhkOID2rLlmxZcV5n-WwccgDAoeBd19u4dJakBp-dkYgsHK1Y-VyAD86hHBA2jndEz96CAYcWiW7qG40mCgHq3jYGzd4Vq5PPsocdjoqA1sU3yVOG6ODM0qhy-_pcyvFJ8MF-Yoqi4KVG-BCJI09HTOT1D3EeJ6Dp1Np-Unuw-nfVnrLQ3f4OuKI-cClzrk_6g7Y8gpYfTUhvwOPas_qLSE8KQFd_cidAIUhSYFV29MLKo9J2WEYnabX7bOSdVKHFHKZDktPPjb0I3kgHGVJOxF4Qwta4vjOGlKhPCgFvYmEhQNpKanxDOrR_hO6l5liZUULvqEfVfAvJT8OeKI3pYxMulGndJsxgMB27HsiMLJ6OqS9oepIACjo9zw-Iao2RNxgxKiQWMtfJ4-yAcVDTherrv8S-WcTeKuOMQAZolltAlBlGhuk0VzlH4Jh5WXEQ4_XeEimY22QQ2tOuV0UwEMyoJRoCaUZbICjRCX8uzF-OUdBWN_CO4O6AB97KML9P4ScU3n9YLELPLp_Kd1RA0fBG1TUbSllELMa8Y16ctxaFH-2VTxv2l9khGJJdBsd25dTxS49POpRm1Ma6PATB4siE00l1tWaZ3ykCnKNkp6s2sMxG51qDiHYNENSXfeUlLHNacTQh1L3j48Loj16p0_p_Yg0C27qal1X2aFZ1TUir5brohJdy_fLFc7LueBF267nyHmmeEud1xDP1EMaJ0gmYj_V2-zfI5BNWZS0ZutyNlvOinzZluslhbCqu7rsVnM2L5Cmh8qjndy4PiMSokkqPE_CSIh_FnLvZa8RU8AUYZBBYXMb5xLV7VUqw1Q6i-KjQRMLh2YAJU8Y9JpyFaB3vD33g3OxKk69qb0UcWanodYq091lCWeTQP4GpQvf1w>53953</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Swift + lldb: `guard let self = self else {...}` doesn't grab the correct self inside a weak block
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Simplest example I can come up with is:

1. Create a macOS App in Xcode (I'm sure there are ways to replicate on other platforms)
2. In the `ViewController.viewDidLoad()`, add the following code:
```swift
DispatchQueue.main.async { [weak self] in
    guard let self = self else { return }
    print("self is \(self)") // breakpoint will go on this line
}
```

## Results

When the code is run without debugging, the console prints 
```
self is <[module].ViewController: 0x....>
```

Notably, it is not an optional.

When the code is run *with* debugging, running `po self` at the lldb prompt yields
```
Optional<ViewController>
- some : <[module].ViewController: 0x....>
```

## Expectation

I expect `po self` to print out the unwrapped `ViewController` object... not one that's wrapped in an `Optional`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVE1v2zAM_TX2hajh2I6THHxokxYIMKzYCmy7yhZja1UkQZLr5t-PktPPFetlgeIviuR7fKRazU_NnTgaic4DPrLwBHvomIJOHxFGA5PwAwiXlJdJvkvy83WRwdYi8wgMjqy7vYNLY0Ao-NVpjpAU631SrI7gRovgB6Qro__ETg68BotGii64awU62MFI5g_aHl1SbOYcRQZ7FZwhqfMfAqetVt5qKdFmD_S6E_yLZpxyBZc6T4otMM6jx4G26UmoHgKeF_C0Ky43iYOfv-2EM8x3w7cRR8yOTKiMuZPqIFldQbK8mpDdg0N5SJY7Yjg7Af36kVkOEn20QlLu5geUDqOzRT9aRY-7FydjhfIRchE3C0c5tvQhZiAeRUFXKuANLWipxvdGkwvpICX0OhTMD-QlhcIzqaf4z-xeK5UUJS34jm6U3r22_BxwLm-UjELaUUW59eiBYzv2PRUwVHXepJym7ogECPRHGZ8ZlVsq3FHzUSJVLXsrHqkB-WNGv6S8_gfyr9qzVp4CAOFDWKU9UGdq44VWTGafkkmKy8CHbm_5kE2F3qCERs_a1jkwHwNIyVtiqY_Gw0mg5O5DjLdnFMT1Pb0zqQtwYYYC3f9TkLOU148GO89C-tfWPQ1wMLxjRdMWJYOgauA3qskyY5D_PVZhv25_UxDCEsutVRhfRh27cvDkR2NOMtDm5xrUecqbkm_KDUu98BKbuzBgJMBVrGesQZ1_NjGhAtTMhIJrdIqSeugta8_CWhvozU2mnODh8InT2Urd3aejlc3gvYlnVZyfnsQf24yOMnqR8uHpdkHyBpb0Kpwbkc6cm2W5WZbp0DBctXW-rquK1-VmUa3aZXlY5xU7sDqvN20qWUt4G9KTZlXhBDFEmNvlLhVNkRe0FptisVgt8mzVFptVVVTrZbcsunWVVDnSGSOzgCPTtk9tEyFRezoySuG8ezEy50SvEGM6is9GGk_yoF1Wm-GUxuRNBP8H8kPJSQ">