https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106288
Bug ID: 106288 Summary: stack protector fails to check stack canary for noreturn function Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- [hjl@gnu-tgl-3 stack-protector]$ cat x.c extern void foo (void) __attribute__ ((noreturn)); void bar (void) { foo (); } [hjl@gnu-tgl-3 stack-protector]$ /export/build/gnu/tools-build/gcc-gitlab-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-gitlab-debug/build-x86_64-linux/gcc/ -O2 -Wall -fstack-protector-all -S x.c [hjl@gnu-tgl-3 stack-protector]$ cat x.s .file "x.c" .text .p2align 4 .globl bar .type bar, @function bar: .LFB0: .cfi_startproc subq $24, %rsp .cfi_def_cfa_offset 32 movq %fs:40, %rax movq %rax, 8(%rsp) xorl %eax, %eax call foo .cfi_endproc .LFE0: .size bar, .-bar .ident "GCC: (GNU) 13.0.0 20220713 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tgl-3 stack-protector]$ There should be a stack canary check before calling foo since foo won't return.