On 31/03/2023 22:58, Xi Ruoyao wrote: > On Fri, 2023-03-31 at 22:54 +0100, Jonny Grant wrote: >> If the error or warning attribute is used on a function declaration >> and a call to such a function is not eliminated through dead code >> elimination or other optimizations, an error or warning (respectively) >> that includes message is diagnosed. > > In this example the "call to such a function" is clearly "eliminated > through" inlining (one of "other optimizations"). > >> https://godbolt.org/z/n849GPTjj > ok yes, now I understand. The compile_abort() got inlined as abort(). compile_abort(): pushq %rax call abort main: pushq %rax call abort So if I implement it, I must avoid it being optimized (using pragma etc as below) Or do as Jonathan Wakely suggested, and just remove the implementation. #pragma GCC push_options #pragma GCC optimize ("O0") void compile_abort() { } #pragma GCC pop_options