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

    <tr>
        <th>Summary</th>
        <td>
            LLVM/Clang does not process visionos availability correctly
        </td>
    </tr>

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

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

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

<pre>
    The following snippet of Objective-C code, which declares the `typedef` as available on watchOS, and unavailable on iOS, macOS and tvOS platforms:

```objectivec
#import <Foundation/Foundation.h>

API_UNAVAILABLE(visionos) @interface Foo
@end

typedef void(^Bar)(Foo *foo) API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios,macos,tvos);
```

Given iOS is unavailable, it also includes derivatives, which means visionOS. 

Compiling this snippet with Apple's clang compiler works as expected:

```
echo "#import <Foundation/Foundation.h>\nAPI_UNAVAILABLE(visionos) @interface Foo\n@end\n typedef void(^Bar)(Foo *foo) API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios,macos,tvos);" | xcrun -sdk xros clang -mtargetos=xros2.5 -O2 -x objective-c -c -o test.o -
```

However, compiling with clang from here fails:

```
echo -e "#import <Foundation/Foundation.h>\nAPI_UNAVAILABLE(visionos) @interface Foo\n@end\ntypedef void(^Bar)(Foo *foo) API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios,macos,tvos);" | arm-apple-darwin11-clang -isysroot /root/SDKs/XROS2.5.sdk/ -mtargetos=xros2.5 -O2 -x objective-c -c -o test.o -
```

**Output**:

```
<stdin>:4:20: error: 'Foo' is unavailable: not available on visionOS
    4 | typedef void(^Bar)(Foo *foo) API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios,macos,tvos);
      | ^ <stdin>:2:38: note: 'Foo' has been explicitly marked unavailable here 2 | API_UNAVAILABLE(visionos) @interface Foo
      | ^
1 error generated.
```

If I explicitly add `visionos` to the `typedef` declaration, it passes.

Unfortunately, this problem occurs when compiling Apple's SDKs, such as `CoreMotion` with llvm / clang, that has declarations such as:

```objectivec
/*!
 * @typedef CMDyskineticSymptomResultHandler
 * @brief Completion handler for CMDyskineticSymptomResult values.
 */
typedef void(^CMDyskineticSymptomResultHandler)(NSArray<CMDyskineticSymptomResult *> * _Nonnull dyskineticSymptomResult, NSError * _Nullable error) API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios, macos, tvos);
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVl1v2zYU_TX0y4UFmZL88eAHRYnWYGk81Guxt4KiriwuFCmQlB3_-4GUndhriq7YsAQE5EjkvZfnnHtIZq3YKcQ1yW5Idjthg2u1WVs3MOM4M0rgpNL1cf17i9BoKfVBqB1YJfoeHegGNtWfyJ3Y47QArmsktIBDK3gLNXLJDFpwLQKZx-7YY40NmcfALLA9E5JVEkErODDH283Wr2WqhkFdfRXjl47xzTZ8d_vNFnrJXKNNZ0mSkziMeTwOfa6J-7c0EV2vjQOSFKUeVM2c0IrQ8vWfqCXJ3Rgk_-3-6-fH_Et-_5DfPNwRutwLK7TSltAVkDQWyqFpGEcotfZr0hhVPS4-bRH2WtSELkl2d8MMoStCl6XWQGjeaO3j-CyXOQIAPsUyi-KwYJxzXYnwM4qO8fB0-1ATSW4u9z4W8ovYYwAOhL2E0-MoHDBpNQjF5VCjhRqN2DOPl31lr0OmLIx732wjGOMWuuuF9BJwrbAvOjgI10Le9z7BwgKXTO2Ah7lo4KDNk_Wc43OP3GH9LWMkzpG3HiH6z_nKCvWTbGWFOtGVFQreiy1KgSwKeOZmUDC19RM8G31Gbdo5ZnbotCXJrX9PowymGwrTZ3jR9ZSDHxocWhdpmH6rgA_6gHs0nlD-QlrgaczTGN1BiwahYUK-0URnSqb4v7LyzqQw002ZF_K0ZuYg1Gw2PfEi7NEarR0QWvonoeX29ldLaPnHp82WRllk6ydCy_-MQUL92AyuH9z4-02SSFJYVwvlsU_ylCQ5jUmSAxqjjf9B6MKjTBd_94IkB6XdtROfG57EOQBAGkB5P1uD8OdrINkdXG-VkiRPlqdd4PVOW2ahQlTecqTgwskjdMw84fXhEvQ_Ev_Tvn9VGonz2Yg47FChYQ7r6FtK7xu4vyyJ1bU_GV8yzWNw-o3zcjxKTx0XHLxn1qKNxrCfVaONGxRzKI9-QjDn3uhKYgea88FYOLSoLqzg1a1HFRdgB956lybzuNAGP-qQbh6PriHlvvPSH-1jTMJcAPqiOnuO8sNDuQySnnkgCc09wGeVFR9vj_ZJKHSCb49d73T3Ce0g3QemaonmYkllhF-gu16iTw_tOAUabb4fB_ZMDiN4EKoo3zy6f1hHaIDHbW4MO5Kk-H6-0Lp3oeivj1qpQUqo357rgX3c3gUljfMHOWp17Od_2WRw7jJ4-_YwqddJvUpWbILr2SJdruL5iqaTdp0sVqxZVSyrcJbhjGZVlVZLzOpZtuLpHCdiTWOaxfOY0oQu0zRapclitaKLZrnAdI6Vt_iOCRl5JUXa7CbC2gHXs5RmMZ1IVqG04R5K6Ulj1F9JzdovmFbDzpI0lsI6-xrCCSdx_fDw5SOhZRGMutZog6_1RnO05zuMfrlyCincEbg2BrmTx8lg5Lp1rg-a9bosd8K1QxVx3RFa-lynx7Q32ouY0DLU7s3_VP5-Tf8KAAD__1agg-I">