[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