https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102166
Thiago Macieira <thiago at kde dot org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hjl.tools at gmail dot com --- Comment #1 from Thiago Macieira <thiago at kde dot org> --- I don't understand how this compiles in C mode: $ gcc -O2 -Werror=implicit-function-declaration -c -xc test.cpp $ gcc -O2 -fno-asynchronous-unwind-tables -S -o - -xc test.cpp .file "test.cpp" .text .p2align 4 .globl avx .type avx, @function avx: vzeroall ret .size avx, .-avx .p2align 4 .globl amx .type amx, @function amx: xorl %eax, %eax #APP # 10 "test.cpp" 1 tileloadd (%rax,%rax,1), %tmm0 # 0 "" 2 # 56 "/usr/lib64/gcc/x86_64-generic-linux/11/include/amxtileintrin.h" 1 tilerelease # 0 "" 2 #NO_APP ret .size amx, .-amx The comments in the assembly output indicate that _tile_loadd is a macro that was expanded from test.cpp and that _tile_release is a function in amxtileintrin.h. But neither is defined. $ gcc -E -xc test.cpp | grep -e _tile_loadd -e _tile_release _tile_loadd(0, 0, 0); _tile_release(); Whatever they are, they are not visible to the preprocessor.