[Bug rtl-optimization/125131] New: pr112824-2.C fails with --enable-default-ssp (unnecessary stack use with -fstack-protector-strong?)
xry111 at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri May 1 16:51:43 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125131
Bug ID: 125131
Summary: pr112824-2.C fails with --enable-default-ssp
(unnecessary stack use with -fstack-protector-strong?)
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: xry111 at gcc dot gnu.org
Target Milestone: ---
With --enable-default-ssp:
FAIL: g++.target/i386/pr112824-2.C scan-assembler-not vmov.*[
\\\\t]+[^\\n]*%rsp
The assembly output is:
_Z4prodR4DualIS_IdLl7EELl2EERKS1_S4_:
.LFB69:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
vxorpd %xmm6, %xmm6, %xmm6
movq %rsp, %rbp
.cfi_def_cfa_register 6
andq $-64, %rsp
subq $576, %rsp
movq %fs:40, %rax
movq %rax, 568(%rsp)
xorl %eax, %eax
vmovapd (%rdx), %zmm10
vmovapd 64(%rsi), %zmm1
movl $-2, %eax
vmovapd (%rsi), %zmm4
kmovb %eax, %k1
vmovdqa64 64(%rdx), %zmm8
vaddsd %xmm6, %xmm10, %xmm2
vaddsd %xmm6, %xmm1, %xmm3
vmovdqa64 128(%rdx), %zmm5
vaddsd %xmm6, %xmm4, %xmm0
vmovdqa64 %zmm8, (%rsp)
vmovdqa64 %zmm5, 64(%rsp)
vbroadcastsd %xmm2, %zmm2
vmulpd %zmm2, %zmm1, %zmm9
vbroadcastsd %xmm3, %zmm1
vbroadcastsd %xmm0, %zmm0
vmulpd %zmm0, %zmm10, %zmm7
vfmadd231pd %zmm10, %zmm1, %zmm9{%k1}
vmovapd 128(%rsi), %zmm1
vfmadd231pd %zmm4, %zmm2, %zmm7{%k1}
vaddsd %xmm6, %xmm1, %xmm3
vmulpd %zmm2, %zmm1, %zmm1
vmulpd %zmm8, %zmm0, %zmm2
vmulpd %zmm5, %zmm0, %zmm0
vbroadcastsd %xmm3, %zmm3
vmovapd %zmm7, (%rdi)
vfmadd231pd %zmm10, %zmm3, %zmm1{%k1}
vaddsd %xmm6, %xmm8, %xmm3
vbroadcastsd %xmm3, %zmm3
vfmadd231pd %zmm4, %zmm3, %zmm2{%k1}
vaddsd %xmm6, %xmm5, %xmm3
vbroadcastsd %xmm3, %zmm3
vfmadd231pd %zmm4, %zmm3, %zmm0{%k1}
vaddpd %zmm9, %zmm2, %zmm2
vmovapd %zmm2, 64(%rdi)
vaddpd %zmm0, %zmm1, %zmm1
vmovapd %zmm1, 128(%rdi)
movq 568(%rsp), %rax
subq %fs:40, %rax
jne .L6
vzeroupper
leave
.cfi_remember_state
.cfi_def_cfa 7, 8
ret
.L6:
.cfi_restore_state
vzeroupper
call __stack_chk_fail
.cfi_endproc
But if -fno-stack-protector there's no stack use at all:
_Z4prodR4DualIS_IdLl7EELl2EERKS1_S4_:
.LFB69:
.cfi_startproc
vmovapd (%rdx), %zmm9
vxorpd %xmm5, %xmm5, %xmm5
vmovapd 64(%rsi), %zmm0
movl $-2, %eax
vmovapd (%rsi), %zmm4
kmovb %eax, %k1
vaddsd %xmm5, %xmm9, %xmm2
vaddsd %xmm5, %xmm0, %xmm3
vaddsd %xmm5, %xmm4, %xmm1
vbroadcastsd %xmm2, %zmm2
vmulpd %zmm2, %zmm0, %zmm6
vbroadcastsd %xmm3, %zmm0
vbroadcastsd %xmm1, %zmm1
vmulpd %zmm1, %zmm9, %zmm7
vfmadd231pd %zmm9, %zmm0, %zmm6{%k1}
vmovapd 128(%rsi), %zmm0
vfmadd231pd %zmm4, %zmm2, %zmm7{%k1}
vaddsd %xmm5, %xmm0, %xmm3
vmulpd %zmm2, %zmm0, %zmm0
vbroadcastsd %xmm3, %zmm2
vmovapd %zmm6, %zmm8
vfmadd231pd %zmm9, %zmm2, %zmm0{%k1}
vmovapd 64(%rdx), %zmm2
vmulpd %zmm1, %zmm2, %zmm6
vaddsd %xmm5, %xmm2, %xmm3
vbroadcastsd %xmm3, %zmm2
vfmadd231pd %zmm4, %zmm2, %zmm6{%k1}
vmovapd 128(%rdx), %zmm2
vmovapd %zmm7, (%rdi)
vaddsd %xmm5, %xmm2, %xmm3
vmulpd %zmm1, %zmm2, %zmm2
vbroadcastsd %xmm3, %zmm1
vaddpd %zmm8, %zmm6, %zmm6
vfmadd231pd %zmm4, %zmm1, %zmm2{%k1}
vmovapd %zmm6, 64(%rdi)
vaddpd %zmm2, %zmm0, %zmm0
vmovapd %zmm0, 128(%rdi)
vzeroupper
ret
.cfi_endproc
So I'd expect -fstack-protector-strong to produce the same assembly as
-fno-stack-protector (if you don't use stack you don't need to protect it
anyway).
More information about the Gcc-bugs
mailing list