<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">