Package: gcc-15
X-Debbugs-Cc: [email protected]
Version: 15.2.0-13
Severity: important
Tags: upstream
Dear Maintainer,
At -O2 gcc miscompiles the following snippet of C code
V2083= ({register object _z=vs_base[0];register object
*_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else {for(;_x<vs_top;)
*_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
as the gdb transcript below demonstrates. In particular, the starting
address of _y, which should be V2048, is offset by 4 bytes. The
problem vanishes at -O1.
=============================================================================
(gdb) b 17163
Breakpoint 4 at 0x23b04f2: file pcl_gcl/gcl_pcl_dfun.c, line 17163.
(gdb) c
Continuing.
Breakpoint 4, LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun (V2046=0xe44078,
V2047=0x1888b10) at pcl_gcl/gcl_pcl_dfun.c:17163
17163 V2083= ({register object _z=vs_base[0];register object
*_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else {for(;_x<vs_top;)
*_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b04f2 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+514>: moveal %a3@,%a0
(gdb) p/x fcall.valp
$35 = 0x0
(gdb) p V2048
$36 = -1073746348
(gdb) p/x V2048
$37 = 0xbfffee54
(gdb) p *(ul *)0xbfffee54@4
$38 = {0, 2027206421, 3221221104, 819826}
(gdb) p/x *(ul *)0xbfffee54@4
$39 = {0x0, 0x78d4b715, 0xbfffeef0, 0xc8272}
(gdb) p vs_top-vs_base
$40 = 3
(gdb) i reg a3
a3 0x79f114 0x79f114
(gdb) p vs_base
$41 = (object *) 0x79f114
(gdb) si
17163 V2083= ({register object _z=vs_base[0];register object
*_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else {for(;_x<vs_top;)
*_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b04f4 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+516>: addql #8,%sp
(gdb) i reg sp
sp 0xbfffed30 0xbfffed30
(gdb) si
0x023b04f6 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b04f6 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+518>: tstl %a4
(gdb) i reg a4
a4 0xbfffee54 0xbfffee54
(gdb) si
0x023b04f8 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b04f8 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+520>:
beqs 0x23b052c <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+572>
(gdb) si
0x023b04fa 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b04fa <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+522>: cmpl %d3,%d2
(gdb) i reg d3
d3 0x79f120 7991584
(gdb) i reg d2
d2 0x79f118 7991576
(gdb) p _x
$42 = <optimized out>
(gdb) p vs_top
$43 = (object *) 0x79f120
(gdb) si
0x023b04fc 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b04fc <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+524>:
bccw 0x23b08de <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+1518>
(gdb)
0x023b0500 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b0500 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+528>: moveal %d2,%a1
(gdb) i reg d2
d2 0x79f118 7991576
(gdb) i reg a1
a1 0x4200000 0x4200000
(gdb) si
0x023b0502 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b0502 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+530>: movel %a4,%d0
(gdb) i reg a4
a4 0xbfffee54 0xbfffee54
(gdb) i reg d0
d0 0x4355d20 70606112
(gdb) si
0x023b0504 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b0504 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+532>: subql #4,%d0
(gdb) i reg d0
d0 0xbfffee54 -1073746348
(gdb) si
0x023b0506 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b0506 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+534>: subl %a3,%d0
(gdb) i reg d0
d0 0xbfffee50 -1073746352
(gdb) i reg a3
a3 0x79f114 0x79f114
(gdb) si
0x023b0508 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b0508 <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+536>:
movel %a1@+,%a1@(0,%d0:l)
(gdb) i reg d0
d0 0xbf85fd3c -1081737924
(gdb) i reg a1
a1 0x79f118 0x79f118
(gdb) i reg d0
d0 0xbf85fd3c -1081737924
(gdb) p *(ul *)0xbfffee54@4
$44 = {0, 2027206421, 3221221104, 819826}
(gdb) p/s *(ul *)0xbfffee54@4
$45 = {0, 2027206421, 3221221104, 819826}
(gdb) p/x *(ul *)0xbfffee54@4
$46 = {0x0, 0x78d4b715, 0xbfffeef0, 0xc8272}
(gdb) p *(ul *)0x79f118
$47 = 7704728
(gdb) p/x *(ul *)0x79f118
$48 = 0x759098
(gdb) si
0x023b050c 17163 V2083= ({register object _z=vs_base[0];register
object *_x=vs_base+1,*_y=(object *)V2048;if (!_y) vs_top=base; else
{for(;_x<vs_top;) *_y++=*_x++;if (_x>vs_top) _y--;vs_top=_y;}_z;});
1: x/i $pc
=> 0x23b050c <LI148__MAKE_FINAL_ACCESSOR_DFUN__pcl_dfun+540>: cmpal %d3,%a1
(gdb) p/x *(ul *)0xbfffee54@4
$49 = {0x0, 0x759098, 0xbfffeef0, 0xc8272}
(gdb) q
=============================================================================
-- System Information:
Debian Release: forky/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: m68k
Kernel: Linux 6.12.48+deb13-amd64 (SMP w/8 CPU threads; PREEMPT)
Kernel taint flags: TAINT_WARN
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: unable to detect
Versions of packages gcc-15 depends on:
ii binutils 2.46-2
ii cpp-15 15.2.0-13
ii gcc-15-base 15.2.0-13
ii gcc-15-m68k-linux-gnu 15.2.0-13
Versions of packages gcc-15 recommends:
ii libc6-dev 2.42-5
Versions of packages gcc-15 suggests:
pn gcc-15-doc <none>
pn gcc-15-locales <none>
-- no debconf information
--
Camm Maguire [email protected]
==========================================================================
"The earth is but one country, and mankind its citizens." -- Baha'u'llah