https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125741
Bug ID: 125741
Summary: FAIL: g++.dg/tree-ssa/pr109442.C -std=gnu++23
scan-tree-dump-not optimized
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: azoff at gcc dot gnu.org
Target Milestone: ---
In r17-987-g14617bda37f8c7, the g++.dg/tree-ssa/pr109442.C test case start
failing for arm-none-eabi.
Testing tree-ssa/pr109442.C, -std=gnu++11
doing compile
Executing on host: /build/r17-1372-g80b78b2504fba0/bin/arm-none-eabi-g++
/build/gcc_src/gcc/testsuite/g++.dg/tree-ssa/pr109442.C -mthumb
-march=armv6s-m -mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto
-fdiagnostics-plain-output -fmessage-length=0 -std=gnu++11 -O2
-fdump-tree-optimized -S -o pr109442.s (timeout = 800)
spawn -ignore SIGHUP /build/r17-1372-g80b78b2504fba0/bin/arm-none-eabi-g++
/build/gcc_src/gcc/testsuite/g++.dg/tree-ssa/pr109442.C -mthumb -march=armv6s-m
-mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto -fdiagnostics-plain-output
-fmessage-length=0 -std=gnu++11 -O2 -fdump-tree-optimized -S -o pr109442.s
pid is 430895 -430895
pid is -1
output is status 0
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++11 (test for excess errors)
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++11 scan-tree-dump-not optimized
"_M_start"
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++11 scan-tree-dump-not optimized
"delete"
Testing tree-ssa/pr109442.C, -std=gnu++23
doing compile
Executing on host: /build/r17-1372-g80b78b2504fba0/bin/arm-none-eabi-g++
/build/gcc_src/gcc/testsuite/g++.dg/tree-ssa/pr109442.C -mthumb
-march=armv6s-m -mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto
-fdiagnostics-plain-output -fmessage-length=0 -std=gnu++23 -O2
-fdump-tree-optimized -S -o pr109442.s (timeout = 800)
spawn -ignore SIGHUP /build/r17-1372-g80b78b2504fba0/bin/arm-none-eabi-g++
/build/gcc_src/gcc/testsuite/g++.dg/tree-ssa/pr109442.C -mthumb -march=armv6s-m
-mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto -fdiagnostics-plain-output
-fmessage-length=0 -std=gnu++23 -O2 -fdump-tree-optimized -S -o pr109442.s
pid is 431059 -431059
pid is -1
output is status 0
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++23 (test for excess errors)
FAIL: g++.dg/tree-ssa/pr109442.C -std=gnu++23 scan-tree-dump-not optimized
"_M_start"
FAIL: g++.dg/tree-ssa/pr109442.C -std=gnu++23 scan-tree-dump-not optimized
"delete"
Testing tree-ssa/pr109442.C, -std=gnu++20
doing compile
Executing on host: /build/r17-1372-g80b78b2504fba0/bin/arm-none-eabi-g++
/build/gcc_src/gcc/testsuite/g++.dg/tree-ssa/pr109442.C -mthumb
-march=armv6s-m -mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto
-fdiagnostics-plain-output -fmessage-length=0 -std=gnu++20 -O2
-fdump-tree-optimized -S -o pr109442.s (timeout = 800)
spawn -ignore SIGHUP /build/r17-1372-g80b78b2504fba0/bin/arm-none-eabi-g++
/build/gcc_src/gcc/testsuite/g++.dg/tree-ssa/pr109442.C -mthumb -march=armv6s-m
-mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto -fdiagnostics-plain-output
-fmessage-length=0 -std=gnu++20 -O2 -fdump-tree-optimized -S -o pr109442.s
pid is 431306 -431306
pid is -1
output is status 0
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++20 (test for excess errors)
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++20 scan-tree-dump-not optimized
"_M_start"
PASS: g++.dg/tree-ssa/pr109442.C -std=gnu++20 scan-tree-dump-not optimized
"delete"
std_list: 20 98 26
With -std=gnu+20, it produces code like:
.type _Z4vat1St6vectorIiSaIiEE, %function
_Z4vat1St6vectorIiSaIiEE:
.fnstart
.LFB1718:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
movs r0, #10
@ sp needed
bx lr
.cantunwind
.fnend
.size _Z4vat1St6vectorIiSaIiEE, .-_Z4vat1St6vectorIiSaIiEE
With -std=gnu+23, it instead produces code like:
.type _Z4vat1St6vectorIiSaIiEE, %function
_Z4vat1St6vectorIiSaIiEE:
.fnstart
.LFB1898:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
ldmia r0, {r0, r3}
subs r0, r3, r0
push {r4, r5, r6, lr}
.save {r4, r5, r6, lr}
asrs r5, r0, #2
beq .L2
movs r2, #7
adds r3, r0, #7
bics r3, r2
asrs r2, r3, #31
subs r3, r3, r0
adds r3, r2, r3
movs r4, r0
cmp r3, #3
bls .L10
adds r0, r0, #4
bl _Znwj
ldr r3, .L11
adds r5, r5, #1
cmp r5, r3
bls .L5
movs r5, r3
.L5:
lsls r4, r5, #2
movs r1, r4
bl _ZdlPvj
.L2:
@ sp needed
movs r0, #10
pop {r4, r5, r6, pc}
.L10:
bl _Znwj
movs r1, r4
bl _ZdlPvj
b .L2
.L12:
.align 2
.L11:
.word 536870911
.fnend
.size _Z4vat1St6vectorIiSaIiEE, .-_Z4vat1St6vectorIiSaIiEE
The same tests pass'es on x86_64-pc-linux-gnu.
Issue first reported at
https://gcc.gnu.org/pipermail/gcc-patches/2026-June/719939.html