* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
@ 2004-06-06 18:54 ` pinskia at gcc dot gnu dot org
2004-06-07 19:11 ` bugzilla at little-bat dot de
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-06-06 18:54 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-06-06 18:54 -------
Confirmed, a regression from 3.0.4. Note it works in 3.4.0 and 3.5.0.
Also note that -O2 -fno-inline -fno-gcse -fno-strict-aliasing also fails so it has nothing to do with
inlining. Also -O1 -fno-inline passes.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Component|c++ |rtl-optimization
Ever Confirmed| |1
Keywords| |wrong-code
Known to fail| |3.3.3
Known to work| |3.4.0 3.5.0 3.0.4
Last reconfirmed|0000-00-00 00:00:00 |2004-06-06 18:54:47
date| |
Summary|temporaries are not |[3.3 Regression] temporaries
|destroyed and overwritten |are not destroyed and
|later |overwritten later
Target Milestone|--- |3.3.4
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
2004-06-06 18:54 ` [Bug rtl-optimization/15853] [3.3 Regression] " pinskia at gcc dot gnu dot org
@ 2004-06-07 19:11 ` bugzilla at little-bat dot de
2004-06-11 22:21 ` pinskia at gcc dot gnu dot org
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: bugzilla at little-bat dot de @ 2004-06-07 19:11 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bugzilla at little-bat dot de 2004-06-07 19:11 -------
The conclusion that it has nothing to do with inlining is wrong: the error
occured with not-inlined member functions and adding -fno-inline to the
command line is just a nop. :-)
I tested a version of the test proggi where constructor & destructor are
inlined:
gcc -Wall -O2 -lstdc++ test-inlined.cpp -> a.out ok
gcc -Wall -O2 -lstdc++ -fno-inline test-inlined.cpp -> a.out BUMMER
gcc -Wall -O1 -lstdc++ -fno-inline test-inlined.cpp -> a.out ok
see <http://k1.dyndns.org/Develop/projects/gcc-error>
... kio !
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
2004-06-06 18:54 ` [Bug rtl-optimization/15853] [3.3 Regression] " pinskia at gcc dot gnu dot org
2004-06-07 19:11 ` bugzilla at little-bat dot de
@ 2004-06-11 22:21 ` pinskia at gcc dot gnu dot org
2004-09-28 13:44 ` gdr at gcc dot gnu dot org
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-06-11 22:21 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|3.3.4 |3.3.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (2 preceding siblings ...)
2004-06-11 22:21 ` pinskia at gcc dot gnu dot org
@ 2004-09-28 13:44 ` gdr at gcc dot gnu dot org
2005-01-23 14:50 ` ebotcazou at gcc dot gnu dot org
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: gdr at gcc dot gnu dot org @ 2004-09-28 13:44 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From gdr at gcc dot gnu dot org 2004-09-28 13:33 -------
Adjust milestone
--
What |Removed |Added
----------------------------------------------------------------------------
Known to work|3.4.0 4.0 3.0.4 |3.4.0 4.0.0 3.0.4
Target Milestone|3.3.5 |3.3.6
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (3 preceding siblings ...)
2004-09-28 13:44 ` gdr at gcc dot gnu dot org
@ 2005-01-23 14:50 ` ebotcazou at gcc dot gnu dot org
2005-01-24 7:53 ` ebotcazou at gcc dot gnu dot org
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2005-01-23 14:50 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ebotcazou at gcc dot gnu dot org 2005-01-23 14:49 -------
A sibcall problem, hence the workaround -O2 -fno-optimize-sibling-calls.
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |ebotcazou at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (4 preceding siblings ...)
2005-01-23 14:50 ` ebotcazou at gcc dot gnu dot org
@ 2005-01-24 7:53 ` ebotcazou at gcc dot gnu dot org
2005-01-24 11:27 ` ebotcazou at gcc dot gnu dot org
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2005-01-24 7:53 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ebotcazou at gcc dot gnu dot org 2005-01-24 07:53 -------
Fixing.
--
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |ebotcazou at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (5 preceding siblings ...)
2005-01-24 7:53 ` ebotcazou at gcc dot gnu dot org
@ 2005-01-24 11:27 ` ebotcazou at gcc dot gnu dot org
2005-01-25 16:42 ` ebotcazou at gcc dot gnu dot org
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2005-01-24 11:27 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ebotcazou at gcc dot gnu dot org 2005-01-24 11:27 -------
Um... first of all, this works on 3.4 branch only by accident, i.e. I think the
underlying problem is still present there. What happens is that a call has an
argument containing a TARGET_EXPR with cleanups and is eligible for the sibling
call optimization. The cleanups are expanded during the first pass but, since
the optimization eventually fails, the RTL is thrown away. Then, during the
second pass, the TARGET_EXPR is expanded again but not the cleanups because they
are not registered (the variable 'cleanups' is NULL at expr.c:9050).
I'm not sure how this is supposed to work. Richard, do you have any
recollection of this? In 2000(!), you commited this patch:
Index: calls.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/calls.c,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -r1.97 -r1.98
--- calls.c 17 Mar 2000 22:40:43 -0000 1.97
+++ calls.c 20 Mar 2000 22:40:50 -0000 1.98
@@ -2020,7 +2020,8 @@
safe_for_reeval = 0;
if (optimize >= 2
&& currently_expanding_call == 1
- && stmt_loop_nest_empty ())
+ && stmt_loop_nest_empty ()
+ && ! any_pending_cleanups (1))
{
/* Verify that each argument is safe for re-evaluation. */
for (p = actparms; p; p = TREE_CHAIN (p))
@@ -2152,6 +2153,12 @@
|| ! FUNCTION_OK_FOR_SIBCALL (fndecl))
continue;
+ /* We know at this point that there are not currently any
+ pending cleanups. If, however, in the process of evaluating
+ the arguments we were to create some, we'll need to be
+ able to get rid of them. */
+ expand_start_target_temps ();
+
/* State variables we need to save and restore between
iterations. */
save_pending_stack_adjust = pending_stack_adjust;
@@ -2925,6 +2932,14 @@
if (args[i].aligned_regs)
free (args[i].aligned_regs);
+ if (pass == 0)
+ {
+ /* Undo the fake expand_start_target_temps we did earlier. If
+ there had been any cleanups created, we've already set
+ sibcall_failure. */
+ expand_end_target_temps ();
+ }
+
insns = get_insns ();
end_sequence ();
which is responsible for expanding the cleanups right after the first pass.
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |rth at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (6 preceding siblings ...)
2005-01-24 11:27 ` ebotcazou at gcc dot gnu dot org
@ 2005-01-25 16:42 ` ebotcazou at gcc dot gnu dot org
2005-04-28 8:23 ` gdr at gcc dot gnu dot org
2005-04-30 13:44 ` gdr at gcc dot gnu dot org
9 siblings, 0 replies; 11+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2005-01-25 16:42 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From ebotcazou at gcc dot gnu dot org 2005-01-25 16:42 -------
Stepping down for now.
--
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|ebotcazou at gcc dot gnu dot|unassigned at gcc dot gnu
|org |dot org
Status|ASSIGNED |NEW
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (7 preceding siblings ...)
2005-01-25 16:42 ` ebotcazou at gcc dot gnu dot org
@ 2005-04-28 8:23 ` gdr at gcc dot gnu dot org
2005-04-30 13:44 ` gdr at gcc dot gnu dot org
9 siblings, 0 replies; 11+ messages in thread
From: gdr at gcc dot gnu dot org @ 2005-04-28 8:23 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From gdr at gcc dot gnu dot org 2005-04-28 08:23 -------
(In reply to comment #6)
> Um... first of all, this works on 3.4 branch only by accident, i.e. I think the
> underlying problem is still present there. What happens is that a call has an
> argument containing a TARGET_EXPR with cleanups and is eligible for the sibling
> call optimization. The cleanups are expanded during the first pass but, since
> the optimization eventually fails, the RTL is thrown away. Then, during the
> second pass, the TARGET_EXPR is expanded again but not the cleanups because they
> are not registered (the variable 'cleanups' is NULL at expr.c:9050).
>
> I'm not sure how this is supposed to work. Richard, do you have any
> recollection of this? In 2000(!), you commited this patch:
RTH --
I guess you did not have interest in this? Shall I close it as WONTFIX?
-- Gaby
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug rtl-optimization/15853] [3.3 Regression] temporaries are not destroyed and overwritten later
2004-06-06 18:43 [Bug c++/15853] New: temporaries are not destroyed and overwritten later bugzilla at little-bat dot de
` (8 preceding siblings ...)
2005-04-28 8:23 ` gdr at gcc dot gnu dot org
@ 2005-04-30 13:44 ` gdr at gcc dot gnu dot org
9 siblings, 0 replies; 11+ messages in thread
From: gdr at gcc dot gnu dot org @ 2005-04-30 13:44 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From gdr at gcc dot gnu dot org 2005-04-30 13:44 -------
Chnages to fix this bug would happen in the middle=end which is risky at
this point. Therefore it won't be fixed for 3.3.6. It fixed in 3.4.0 though.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Target Milestone|3.3.6 |3.4.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15853
^ permalink raw reply [flat|nested] 11+ messages in thread