Skip to content

cmake: Fix C compatibility of libunwind probes

Florian Weimer requested to merge fweimer/heaptrack:c99 into master

Future compilers such as GCC 14 are likely to enforce C type compatibility rules by default and report errors like this one:

…/TryCompile-aAxUZn/src.c: In function ‘main’:
…/TryCompile-aAxUZn/src.c:3:43: error: passing argument 1 of ‘unw_backtrace’ from incompatible pointer type
    3 | int main() { void* buf[10]; unw_backtrace(&buf, 10); return 0; }
      |                                           ^~~~
      |                                           |
      |                                           void * (*)[10]
In file included from /usr/include/libunwind-x86_64.h:129,
                 from /usr/include/libunwind.h:23,
                 from …/TryCompile-aAxUZn/src.c:2:
/usr/include/libunwind-common.h:318:27: note: expected ‘void **’ but argument is of type ‘void * (*)[10]’
  318 | extern int unw_backtrace (void **, int);
      |                           ^~~~~~~

Removing the address operator ensures that the array type decays to a pointer, and that the types are compatible.

Related to:

Merge request reports