https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94832

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Kenneth Heafield from comment #3)
> Being a macro some of the time also causes trouble with template commas and
> the C preprocessor.  
> 
> #include <immintrin.h>
> template <class S, class T> int *TemplatedFunction();
> void Fail() {
>   _mm512_mask_i32scatter_epi32(TemplatedFunction<void, void>(), 0xffff,
> _mm512_set1_epi32(1), _mm512_set1_epi32(1), 1);
> }

You need to wrap the arguments in ()s then, I'm afraid there is nothing else
that can be done about that.  The reason for the macros rather than inline
functions is that those particular intrinsic require at least one compile time
constant argument and at -O0 there is no guarantee the compile time constant
would be propagated into the builtin that is used under the hood for the
intrinsic.
It is the same thing as with say C header APIs, those can be also implemented
as functions or as macros.

Reply via email to