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

    <tr>
        <th>Summary</th>
        <td>
            [GNU ObjC] Clang 14 regression: access violation when building with ARC and optimization
        </td>
    </tr>

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

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

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

<pre>
    Building the following Objective-C code using using Automatic Reference Counting and the GNU Objective-C 2.0 runtime and `-O1` or better optimization using Clang 14.0.5 causes an access violation at runtime.

This does not happen with Clang 13.0.1, or when using `-O0`, or when not using ARC.

```objc
#import "objc/runtime.h"

__attribute__((objc_root_class))
@interface Test {
  id isa;
}
+ (id)new;
@end

@implementation Test
+ (id)new {
  return class_createInstance(self, 0);
}
@end

int main(void) {
  [Test new];
  return 0;
}
```

Building:
```
"C:\Program Files\LLVM-14\bin\clang" -IC:\libobjc2\include -LC:\libobjc2\lib -fobjc-runtime=gnustep-2.0 -fobjc-arc -fuse-ld=lld -lobjc -O2 -o test.exe test.m
```

Result:
```
* thread #1, stop reason = Exception 0xc0000005 encountered at address 0x7ffb16aea405: Access violation reading location 0xffffffffffffffff
    frame #0: 0x00007ffb16aea405 objc.dll`objc_retain + 149
objc.dll`objc_retain:
->  0x7ffb16aea405 <+149>: movq   (%rax), %rcx
    0x7ffb16aea408 <+152>: movl   $0x4000, %edx             ; imm = 0x4000
    0x7ffb16aea40d <+157>: callq  0x7ffb16aeacb0            ; objc_storeWeak + 1472
    0x7ffb16aea412 <+162>: movl   %eax, 0x54(%rsp)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9Vd9v4zYM_mucF8GBrNhJ-pCH1m2HA7p1ONxtj4Es0YlusuWT5DbbXz9Ssdv0xxYYiiRS30dSJNU4_ffuZjRWm_7A4hFY66x1z7R6bH6AiuYJ8popp4GNgbbP4_UYXSejUewrtOChV8BqN_aRhLLXCeuX376_QRFLzjzpdJB0sjXPHwscmfOsgRjBMzeg2PyD0K6fuGorcSzKJV9WTMkxQMDjTCoFIbAn4-xZW8YZfZnx24xfn8dvRxOYdniod5Ed5TBAz55NPM7AKwQuMlGTFc9HmGmTdRzHSxFBTBH4Wr-hIcX0ueaHmrbEynSD85FlQqRtcT9beMSty-P7vYzRm2aMsN9nYosfndh75-JeWRlCJq7oO58puekxXK3EuH-DgAybm7OIMaOZCTJbTRvZ5nY25wYN2RqNMD08vyqUHHr9xheE7wYLHfTxHFvi-BTlkthDHH3PkrV75UFG-NKHKDE58EQA21IoOXnx0bgPRqCDrJOmx6NPLtFdcmXVTfKbHKluX_BejOCfUMw3dMkyJ3-2en-Ps7uiJllV_-7dwcuO3RsLAdcPD3_8mhclzho0sqoVZROqs_zLdMKahu5Q4NT0yo5YQ_nDRxlOWd7SKp-yI1vdHvoxRBhyqplJKL3CKaZ_bjVqWKtZbknC8kdkdSxiQJZwgvOk-x-vv0IYbfxvn6-xfvH-sETFKpVGiG7A0MqAuYDc7O6kYEiZwU-Kp1_FsAtQC8B2oKkYpdaeKpSfNm3bFGsJsuQVkrLr96VLXFRU1ik5obbvfvP9MtbiLQBZxgmLn4j8koFRTJba2qkY95gSmEeMMrcopwr6XOclInm2umPvLEfHa8QgiNUdUXfu6Sfak6q18vKUKrRmtFCnV3vfoGxnlEq8otiEUvJTia5MEKBP7PKH-cxM16XoT4qfM-gXhs3EoKS1P99oqYa_x05RwGv28CfIv6ZgbcTnJIWYSdYf3KiAIoF1fqrKKTRheO1cc6ot9G6lr1ZXchFNtLDDgp7eixoL-qXpY2ocKIswKYjlQ9NPXbmZX7DU1rEzp-fl8ilZjN7ujjEOga5Y3ON3QN2xWSrX4cLap_kvH7yjNwuXJoQRa13cV2terRfHnShhKzdbIbebtpEbodVWFY0s15uiWW91s7CyARvIGewE1B4TBPX66nZhdoILwddFVVR8W66XVxteAELrEq-tVQU1QWx5dkl2LJ0_LPwumdSMh4BCa0IMr0Jss-bQQ4od4csxHp3f4TOCvbtdJOpdMv1fD6hTKA">