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

    <tr>
        <th>Summary</th>
        <td>
            Error when using Apple's simd.h header with C++ modules
        </td>
    </tr>

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

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

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

<pre>
    I don't know if this a problem with clang or with Apple's header or what. But I'm not able to include the simd vector types in certain module files. Here is a minimal example.  I'm using the latest clang.

`ModuleWithVectors.cc`
```c++
module;

#include <simd/simd.h>

export module ModWithVectors;

export simd::double2 foo() {
    // The include simd.h seems to work as expected for this code.
    double x = 3.0;
    simd::double2 vec = simd_make_double2(x, x);
    return vec;
}
```

`ModImpl.cc`
```c++
module;

#include <simd/simd.h>

module ModWithVectors;

// #include <simd/simd.h>

simd::double2 foo_impl() {
    double x = 3.0;
 simd::double2 vec = simd_make_double2(x, x);   // error about 'no matching function call'
    return vec;
}
```

```sh
CC="/Users/rob/Dev/llvm-project/build/bin/clang++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -std=c++2b"
$CC -x c++-module ModWithVectors.cc --precompile -o ModWithVectors.pcm
$CC -c -fprebuilt-module-path=. ModImpl.cc -o ModImpl.cc.o
```

Fails with:
```text
ModImpl.cc:11:25: error: no matching function for call to 'simd_make_double2'
    simd::double2 vec = simd_make_double2(x, x);
                        ^~~~~~~~~~~~~~~~~
1 error generated.
```

If I try putting the include after the module declaration, I get other errors.

```text
In file included from /Users/rob/Dev/llvm-project/build/lib/clang/17/include/x86gprintrin.h:40:
/Users/rob/Dev/llvm-project/build/lib/clang/17/include/cmpccxaddintrin.h:19:9: error: declaration of '_CMPCCX_ENUM' in module ModWithVectors follows declaration in the global module
typedef enum {
```

The declaration, in `simd/vector_make.h`, looks like this. That should be usable in `ModImpl.cc`, no?

```c++
/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit
 *  floating-point numbers. */
static inline SIMD_CFUNC simd_double2 simd_make_double2(double x, double y) {
  simd_double2 result;
 result.x = x;
  result.y = y;
  return result;
}
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v4zYT_jX0ZWBBIv0RH3xw5Aiv8SLbBXa33VtAUSOLDUUKJJXYl_72gpS8jh13sW23hpBIHPKZ4cwzH9w5udeIazK_J_PthPe-MXZttXzmukI7KU11XO-gMprQpYdnbV5B1uAb6YBDZ02psIVX6RsQius9GDt8bbpOIaFLBw3yCm0UNNwncN972BG6bEEbD7xUCN6A1EL1FYJvEJxsK3hB4Y0Ff-zQgdQg0HouNbSm6hVCLRW6BP6HFiHa0kotW64AD7ztFCYwKumd1PsIq7hH5wc7E5JuSboZ_y7Sx4j6m_TNr1GvS4Qgi_SbfHgEoffhiauDIYTdX0BRdroJYXm4CKFF-Jc0hD283YmHzlh_us6jqd4ovwIdt0Y0tiFsU5m-VEihNobQO0JXQJbjCQAAQgtCC_jc4De3DiaAQ2xdcPersc_AHeChQ-Gxgjr4OkRVmAqTM9agCg5A2BZYkn4zLQjfW_SCIu4MkqeWP-PTKCH07kBoDgdCVxcYFn1vdTh4vvVye-X499HatZ36z2P0I8EZnf3joDfD-CTbTt2K5V_7_587_0wRtNZY4KXpPRC61AZa7kUTMqbutfDSaBBcKUKX_y5iw-OaYSHPCdsSSgktvji0jtDCmpLQYosvhBZKvbTTzprfUXhCi7KXKnizlJrQIqbvEGOYSnd01phgfBEqjhQ82BwAv0Yi864jtMiN9qi9GzSgMh1aQouPivva2DasP3Lxy6evSTcuXe38tP3_eVPGkixx1TNMna8I246Mo2W40ciJWZ7D9ACjaHqTSIkQMJ12FoVpO6kQpuZ6RyfaC0QB07qzGDziR9Bpx31D2DaBc1aMSONXYr4Tm4JL5WLJDly63Ofx4IelNwnHNllG2IbOCdsM_AkvN5kTakpgTyg4oRW8p-Xy59aSWz8yf_jj6jccyEb271Gj5R6r5Dtu2tWwA2-P0PXenxrKKeF57dHGlTHOFQrFbaRisHMHe_RgfIN20Omu28-1v3c6NriThgpqa1r4e-miZHlOlyJbElqMcIQWh7vFvrNSeyt1qFCbWXqO_89TI9pOiAOvqjeashVhm9UFe974C0wduPKUP37M869PDx--PBK6hHPjv8wQqI1S5tVdQEgdg7FXpuRqPDdcLUwTFdaAum_PdfZmxEP3vIqj1BCK2FDbh_kk8jJpwlmagzLm2YGSzxh7aQKfG-7BNaZXFZQIvYvjzoBz2cRoDtoQVtwkxkVPi6V7Q2gGZJby0nnLhYfcaME96jDjBPQDWaTAdRXej-Hdm5CPLfDTZGVq8K8GFrNpKUfaAaEbgFoZHjg-7YzUHnTflmhdAlHraKDz3EsBUiupET7tHrdPefHlQz4k6ymDb2XuqaGFG4_vx6uud4Fh0fXKn9N8-E6Ghnh4k_6j4BgFxwtB7FdXQN9vWZNqzaoVW_EJrrPFcpXNZqvVbNKsV_Uy4-mSZyxb8bpO03LFWIlzlt4JtsC7iVzTlLKUZXcZS1fzWZLRjNK0LKtqWfP5XUlmKbZcqiQkVGLsfiKd63G9yGYrNlG8ROXiPE6pxleIwtBZ5tuJXcckLPu9I7NUSefdGcVLr3D9EGvaa4N6nHzPg_g4A47zeJzS87GRDjniJr1V68b7zoViEEeEvfRNXybCtGMJeF8JooWhWsQb_BkAAP__h5S97w">