public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/23775] New: 4.1: wrong code in argument passing
@ 2005-09-08 2:31 gcc-bugzilla at gcc dot gnu dot org
2005-09-08 5:52 ` [Bug target/23775] [4.1 Regression] " pinskia at gcc dot gnu dot org
` (4 more replies)
0 siblings, 5 replies; 15+ messages in thread
From: gcc-bugzilla at gcc dot gnu dot org @ 2005-09-08 2:31 UTC (permalink / raw)
To: gcc-bugs
On a i686 platform, the example below is miscompiled with -O1.
I expect this program to print -0.96. Here's what it actually does:
$ g++ -O1 -o y y.cc
$ ./y
-1.288766
$ g++ -o y y.cc
$ ./y
-0.960000
$
The value that the optimized version prints is actually different
on each run of the program.
Here's the generated code for main(),
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl %ebx, -8(%ebp)
movl %esi, -4(%ebp)
andl $-16, %esp
subl $16, %esp
movl $0, 12(%esp)
movl 8(%esp), %ebx ; this seems to load ebx with garbage???
movl 12(%esp), %esi
fldz
fstl 8(%esp)
fstpl (%esp)
call _Z8x_from_zdd
fstpl 4(%esp)
movl %ebx, 8(%esp) ; this clobbers half of the arg with
; the garbage
movl %esi, 12(%esp)
movl $0, (%esp)
call _Z17local_to_trflocalidi
movl $0, %eax
movl -8(%ebp), %ebx
movl -4(%ebp), %esi
movl %ebp, %esp
popl %ebp
ret
It looks to me like the error occurs during RTL generation.
Here's the tree dump from the t87.final_cleanup file (slightly trimmed):
void local_to_trflocal(int, double, int) (D.1741, x_loc, D.1743)
{
<bb 0>:
printf (&"%f\n"[0], x_loc);
return;
}
double x_from_z(double, double) (pitch, stereo)
{
<bb 0>:
return -9.59999999999999964472863211994990706443786621094e-1 / cos (stereo);
}
int main() ()
{
<bb 0>:
local_to_trflocal (0, x_from_z (0.0, 0.0), 0);
return 0;
}
But in the 00.expand file, here's the sequence leading
to the local_to_trflocal() call:
(insn 27 26 28 1 (set (mem/i:DF (plus:SI (reg/f:SI 56 virtual-outgoing-args)
(const_int 4 [0x4])) [0 S8 A32])
(reg:DF 71)) -1 (nil)
(nil))
(insn 28 27 29 1 (set (mem:DI (plus:SI (reg/f:SI 56 virtual-outgoing-args)
(const_int 8 [0x8])) [0 S8 A8])
(reg:DI 68)) -1 (nil)
(nil))
(insn 29 28 30 1 (set (mem:SI (reg/f:SI 56 virtual-outgoing-args) [0 S4 A32])
(const_int 0 [0x0])) -1 (nil)
(nil))
(call_insn 30 29 31 1 (call (mem:QI (symbol_ref:SI ("_Z17local_to_trflocalidi") [flags 0x3] <function_decl 0xb7f0df80 local_to_trflocal>) [0 S1 A8])
(const_int 16 [0x10])) -1 (nil)
(nil)
(nil))
Reg 71 here is the return value from x_from_z.
I don't know where the DI store to v-o-a+8 is coming from...
Environment:
System: Linux karma 2.6.12.1sss #2 Thu Jul 7 00:28:21 EDT 2005 i686 i686 i386 GNU/Linux
Architecture: i686
<machine, os, target, libraries (multiple lines)>
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /home/sss/gcc/gcc/configure --prefix=/usr/local/gcc --enable-threads=posix --enable-long-long --enable-languages=c,c++,f95
How-To-Repeat:
Compile with -O1
-----------------------------------------------------
//g++ -O1 -g -o y y.cc
extern "C" double cos(double);
extern "C" int printf (...);
double x_from_z(double pitch=0, double stereo=0)
{
return -0.96/cos(stereo);
}
void local_to_trflocal(int, double x_loc, int=0)
{
printf ("%f\n", x_loc);
}
int main()
{
local_to_trflocal(0, x_from_z());
return 0;
}
-----------------------------------------------------
------- Additional Comments From snyder at fnal dot gov 2005-09-08 02:31 -------
Fix:
<how to correct or work around the problem, if known (multiple lines)>
--
Summary: 4.1: wrong code in argument passing
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: snyder at fnal dot gov
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
2005-09-08 2:31 [Bug middle-end/23775] New: 4.1: wrong code in argument passing gcc-bugzilla at gcc dot gnu dot org
@ 2005-09-08 5:52 ` pinskia at gcc dot gnu dot org
2005-09-08 9:08 ` rguenth at gcc dot gnu dot org
` (3 subsequent siblings)
4 siblings, 0 replies; 15+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-09-08 5:52 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-09-08 05:52 -------
Confirmed.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Component|middle-end |target
Ever Confirmed| |1
GCC build triplet|i686-pc-linux-gnu |
GCC host triplet|i686-pc-linux-gnu |
Keywords| |wrong-code
Last reconfirmed|0000-00-00 00:00:00 |2005-09-08 05:52:53
date| |
Summary|4.1: wrong code in argument |[4.1 Regression] wrong code
|passing |in argument passing
Target Milestone|--- |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
2005-09-08 2:31 [Bug middle-end/23775] New: 4.1: wrong code in argument passing gcc-bugzilla at gcc dot gnu dot org
2005-09-08 5:52 ` [Bug target/23775] [4.1 Regression] " pinskia at gcc dot gnu dot org
@ 2005-09-08 9:08 ` rguenth at gcc dot gnu dot org
2005-09-08 12:46 ` pinskia at gcc dot gnu dot org
` (2 subsequent siblings)
4 siblings, 0 replies; 15+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2005-09-08 9:08 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From rguenth at gcc dot gnu dot org 2005-09-08 09:08 -------
Reduced testcase:
extern "C" double cos(double);
extern "C" void abort(void);
double x_from_z(double pitch=0, double stereo=0); // __attribute__((const));
double x_from_z(double pitch, double stereo)
{
return 1.0/cos(stereo);
}
void local_to_trflocal(int, double x_loc, int=0)
{
if (x_loc != 1.0)
abort ();
}
int main()
{
local_to_trflocal(0, x_from_z());
return 0;
}
Code is ok if you declare x_from_z const.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
2005-09-08 2:31 [Bug middle-end/23775] New: 4.1: wrong code in argument passing gcc-bugzilla at gcc dot gnu dot org
2005-09-08 5:52 ` [Bug target/23775] [4.1 Regression] " pinskia at gcc dot gnu dot org
2005-09-08 9:08 ` rguenth at gcc dot gnu dot org
@ 2005-09-08 12:46 ` pinskia at gcc dot gnu dot org
2005-09-08 16:43 ` jakub at gcc dot gnu dot org
2005-09-09 17:43 ` jakub at gcc dot gnu dot org
4 siblings, 0 replies; 15+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-09-08 12:46 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-09-08 12:46 -------
And here is a C testcase:
double cos(double);
void abort(void);
double x_from_z(double pitch, double stereo); // __attribute__((const));
double x_from_z(double pitch, double stereo)
{
return 1.0/cos(stereo);
}
void local_to_trflocal(int b, double x_loc, int a)
{
if (x_loc != 1.0)
abort ();
}
int main()
{
local_to_trflocal(0, x_from_z(0,0),0);
return 0;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
2005-09-08 2:31 [Bug middle-end/23775] New: 4.1: wrong code in argument passing gcc-bugzilla at gcc dot gnu dot org
` (2 preceding siblings ...)
2005-09-08 12:46 ` pinskia at gcc dot gnu dot org
@ 2005-09-08 16:43 ` jakub at gcc dot gnu dot org
2005-09-09 17:43 ` jakub at gcc dot gnu dot org
4 siblings, 0 replies; 15+ messages in thread
From: jakub at gcc dot gnu dot org @ 2005-09-08 16:43 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |jakub at gcc dot gnu dot org
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2005-09-08 05:52:53 |2005-09-08 16:43:23
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
2005-09-08 2:31 [Bug middle-end/23775] New: 4.1: wrong code in argument passing gcc-bugzilla at gcc dot gnu dot org
` (3 preceding siblings ...)
2005-09-08 16:43 ` jakub at gcc dot gnu dot org
@ 2005-09-09 17:43 ` jakub at gcc dot gnu dot org
4 siblings, 0 replies; 15+ messages in thread
From: jakub at gcc dot gnu dot org @ 2005-09-09 17:43 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From jakub at gcc dot gnu dot org 2005-09-09 17:43 -------
The difference between 4.0 and HEAD is the expr.c hunk of
http://gcc.gnu.org/ml/gcc-patches/2005-07/msg02021.html
If Paolo's reversion of that:
http://gcc.gnu.org/ml/gcc-patches/2005-09/msg00589.html
makes it in, the testcase will pass again.
The real problem is I think that when calls.c decides to save stack area
under an argument for the inner expand_call, but that argument partially overlaps
with the result of the call, we save/restore the argument with the inner
expand_call's argument mode and don't just limit to the actual bytes that
have already been initialized. So we read some uninitialized bits from the
stack and overwrite with them the computed argument.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
` (7 preceding siblings ...)
2005-11-04 22:56 ` steven at gcc dot gnu dot org
@ 2005-11-16 21:32 ` pinskia at gcc dot gnu dot org
8 siblings, 0 replies; 15+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-11-16 21:32 UTC (permalink / raw)
To: gcc-bugs
------- Comment #11 from pinskia at gcc dot gnu dot org 2005-11-16 21:32 -------
And for the realy record this was fixed by the patch which fixed PR 24003 also.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
` (6 preceding siblings ...)
2005-11-04 10:55 ` jakub at gcc dot gnu dot org
@ 2005-11-04 22:56 ` steven at gcc dot gnu dot org
2005-11-16 21:32 ` pinskia at gcc dot gnu dot org
8 siblings, 0 replies; 15+ messages in thread
From: steven at gcc dot gnu dot org @ 2005-11-04 22:56 UTC (permalink / raw)
To: gcc-bugs
------- Comment #10 from steven at gcc dot gnu dot org 2005-11-04 22:56 -------
For the record, Jakub has apparently dropped this bug from his list to put this
bug back into unassigned state.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
` (5 preceding siblings ...)
2005-11-03 21:00 ` steven at gcc dot gnu dot org
@ 2005-11-04 10:55 ` jakub at gcc dot gnu dot org
2005-11-04 22:56 ` steven at gcc dot gnu dot org
2005-11-16 21:32 ` pinskia at gcc dot gnu dot org
8 siblings, 0 replies; 15+ messages in thread
From: jakub at gcc dot gnu dot org @ 2005-11-04 10:55 UTC (permalink / raw)
To: gcc-bugs
--
jakub at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hubicka at gcc dot gnu dot
| |org
AssignedTo|jakub at gcc dot gnu dot org|unassigned at gcc dot gnu
| |dot org
Status|ASSIGNED |NEW
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
` (4 preceding siblings ...)
2005-10-31 5:42 ` mmitchel at gcc dot gnu dot org
@ 2005-11-03 21:00 ` steven at gcc dot gnu dot org
2005-11-04 10:55 ` jakub at gcc dot gnu dot org
` (2 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: steven at gcc dot gnu dot org @ 2005-11-03 21:00 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from steven at gcc dot gnu dot org 2005-11-03 21:00 -------
Jakub, ping!
What's up with this one?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
` (3 preceding siblings ...)
2005-10-22 21:57 ` pinskia at gcc dot gnu dot org
@ 2005-10-31 5:42 ` mmitchel at gcc dot gnu dot org
2005-11-03 21:00 ` steven at gcc dot gnu dot org
` (3 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: mmitchel at gcc dot gnu dot org @ 2005-10-31 5:42 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from mmitchel at gcc dot gnu dot org 2005-10-31 05:41 -------
Yup, this is a showstoppper.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2005-10-17 19:02 ` pluto at agmk dot net
@ 2005-10-22 21:57 ` pinskia at gcc dot gnu dot org
2005-10-31 5:42 ` mmitchel at gcc dot gnu dot org
` (4 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-10-22 21:57 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P1
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
@ 2005-10-17 19:02 ` pluto at agmk dot net
2005-10-22 21:57 ` pinskia at gcc dot gnu dot org
` (5 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: pluto at agmk dot net @ 2005-10-17 19:02 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from pluto at agmk dot net 2005-10-17 19:01 -------
both testcases works for me 4.1.0-20051005.
i have applied patches for: PR7776, PR20297, PR22533, PR23948, PR19505,
PR20606/PR24069.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
@ 2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
` (7 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-10-16 21:51 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |critical
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Bug target/23775] [4.1 Regression] wrong code in argument passing
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
@ 2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
2005-10-17 19:02 ` pluto at agmk dot net
` (6 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-10-16 21:51 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from pinskia at gcc dot gnu dot org 2005-10-16 21:51 -------
Any news on getting this fixed?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23775
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2005-11-16 21:32 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-09-08 2:31 [Bug middle-end/23775] New: 4.1: wrong code in argument passing gcc-bugzilla at gcc dot gnu dot org
2005-09-08 5:52 ` [Bug target/23775] [4.1 Regression] " pinskia at gcc dot gnu dot org
2005-09-08 9:08 ` rguenth at gcc dot gnu dot org
2005-09-08 12:46 ` pinskia at gcc dot gnu dot org
2005-09-08 16:43 ` jakub at gcc dot gnu dot org
2005-09-09 17:43 ` jakub at gcc dot gnu dot org
[not found] <bug-23775-702@http.gcc.gnu.org/bugzilla/>
2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
2005-10-16 21:51 ` pinskia at gcc dot gnu dot org
2005-10-17 19:02 ` pluto at agmk dot net
2005-10-22 21:57 ` pinskia at gcc dot gnu dot org
2005-10-31 5:42 ` mmitchel at gcc dot gnu dot org
2005-11-03 21:00 ` steven at gcc dot gnu dot org
2005-11-04 10:55 ` jakub at gcc dot gnu dot org
2005-11-04 22:56 ` steven at gcc dot gnu dot org
2005-11-16 21:32 ` pinskia at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).