Richard, you are right about the problem with the void pointer casting. I'm
aware of it and already had to patch a few headers.

However my question above is not about void pointers at all. If you check
the compiler error message, you will see that it is complaining about
atomic_cmpxchg_int function. It appears in several core files and in auth
module:
https://github.com/search?q=repo%3Akamailio%2Fkamailio%20atomic_cmpxchg_int&type=code.
I also want to reiterate that while compiling exactly the same C++ module
with GCC I do not get this error. It appears only when switching to Clang.

For example, this function is used in this header
https://github.com/kamailio/kamailio/blob/db8258bf9ab7ca772923d237f40fce4381dbcde4/src/core/atomic/atomic_x86.h#L256
but there are no other includes that might be pulling it in. This makes me
think that it might be some sort of GCC built-in function, but internet
seems to know nothing about it. The closest thing to it that I could find
is GCC's __atomic_comare_exchange (
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html),
although the signature differs quite a bit.

So, does anyone here know where is this function implemented?
-- 
Ivan Ribakov
Software Engineer
www.zaleos.net


On Sat, 29 Apr 2023 at 15:29, Richard Fuchs <rfu...@sipwise.com> wrote:

> On 28/04/2023 18.56, [EXT] Ivan Ribakov wrote:
>
> Hi all,
>
> I looked at Kamailio 5.6.3 makefiles and saw mention of clang being
> supported. Yet when I try to build it with clang (more precisely, I build a
> C++ module using clang that includes some Kamailio C headers via "extern
> C") I get following error:
>
> In file included from /tmp/kamailio/kamailio/modules/tm/t_funcs.h:45:
> /tmp/kamailio/kamailio/modules/tm/timer.h:204:2: error: no matching
> function for call to 'atomic_cmpxchg_int'
>
> Any suggestions on how to overcome this error or any general suggestions
> for using Kamailio + clang?
>
> That's not a problem of clang, but rather a problem of using C++. C++
> doesn't play nice with the void* type and that's what's being used in that
> inlined function. You'd have the same problem with gcc.
>
> You can either patch up timer.h and change the cast to int* (which it
> probably should be anyway), or pull in the header in a C source, and then
> link that from the rest of your C++ project.
>
> Cheers
> _______________________________________________
> Kamailio (SER) - Development Mailing List
> To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
>
_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to