* [Bug c++/21951] [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
@ 2005-06-07 18:00 ` pinskia at gcc dot gnu dot org
2005-06-07 18:12 ` pcarlini at suse dot de
` (14 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-06-07 18:00 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-07 18:00 -------
And I already filed this way back, see PR 19699 which I am closing this bug as a dup.
See comment #2 in that PR from RTH:
There is zero chance that this will be fixed for 4.0. That's exactly why Ian
implemented the minimalistic check that he did in solving PR19583 and related.
You may retartget this pr to fixing the silliness in libstdc++, if you want.
*** This bug has been marked as a duplicate of 19699 ***
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |DUPLICATE
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug c++/21951] [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
2005-06-07 18:00 ` [Bug c++/21951] " pinskia at gcc dot gnu dot org
@ 2005-06-07 18:12 ` pcarlini at suse dot de
2005-06-07 18:17 ` pinskia at gcc dot gnu dot org
` (13 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: pcarlini at suse dot de @ 2005-06-07 18:12 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pcarlini at suse dot de 2005-06-07 18:12 -------
> You may retartget this pr to fixing the silliness in libstdc++, if you want.
And the "silliness" would be? Personally, I'm finding quite a bit of silliness
in this remark, to tell you the truth and indeed, mainline is ok, probably the
current compiler judges that "silliness" not so silly, after all.
When -fno-exceptions, the catch becomes simply an 'if (false)' and I don't see
why the implementors of v3 have necessarily to care about the branch not
returning.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug c++/21951] [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
2005-06-07 18:00 ` [Bug c++/21951] " pinskia at gcc dot gnu dot org
2005-06-07 18:12 ` pcarlini at suse dot de
@ 2005-06-07 18:17 ` pinskia at gcc dot gnu dot org
2005-06-07 19:46 ` veksler at il dot ibm dot com
` (12 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-06-07 18:17 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-07 18:16 -------
(In reply to comment #2)
> > You may retartget this pr to fixing the silliness in libstdc++, if you want.
Paolo I copied the quote fully when I really should not have. RTH did not know we could not fix the
if(0) part in libstdc++ at the time he wrote that comment, if you read the next comment in that bug I
explain why it cannot be fixed in libstdc++ (comment #3 in PR 19699):
(In reply to comment #2)
> You may retartget this pr to fixing the silliness in libstdc++, if you want.
Actually it is only silliness as try/catch is changed to be "if (true)"/"if (false)" if we don't have exceptions.
There is nothing can be done to the libstdc++ headers to fix this.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug c++/21951] [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (2 preceding siblings ...)
2005-06-07 18:17 ` pinskia at gcc dot gnu dot org
@ 2005-06-07 19:46 ` veksler at il dot ibm dot com
2005-06-07 23:28 ` [Bug libstdc++/21951] " bangerth at dealii dot org
` (11 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: veksler at il dot ibm dot com @ 2005-06-07 19:46 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From veksler at il dot ibm dot com 2005-06-07 19:46 -------
(In reply to comment #3)
> Paolo I copied the quote fully when I really should not have. RTH did not
know we could not fix the
> if(0) part in libstdc++ at the time he wrote that comment, if you read the
next comment in that bug I
> explain why it cannot be fixed in libstdc++ (comment #3 in PR 19699):
> (In reply to comment #2)
> > You may retartget this pr to fixing the silliness in libstdc++, if you want.
> Actually it is only silliness as try/catch is changed to be "if (true)"/"if
(false)" if we don't have exceptions.
> There is nothing can be done to the libstdc++ headers to fix this.
I disagree. libstdc++ can do exactly what everybody else does in such cases:
add a dummy (unreachable) "return __result" at the end, after both try
and catch blocks.
This will be a hack, no doubt, a pragmatic one. I don't think that emitting
false positive diagnostic that the user does not control is a good thing.
I have been working in a verification (research) department for 10 years,
and I can assure you that false positives, which can't be turned off,
are worse than no diagnostic at all. Such diagnostics *will* turn
customers/users away from your tool, or at best "just" ignore diagnostics.
I have used a (bought) tool that gave a false positive every 500 lines of
code. For 500 KLOC it would give 1K false positive. Now, try to find out a
single true bug out of the noise of 1000 false positives. I can tell you that
the tool was dropped very fast.
We write tools used for verification and testing. Our customers are more likely
to be willing to live with uncovered events, than to get false positives. Think
of millions of tests/events that cause even 0.1% of false positive. These may
overshadow hundreds of real bugs.
Same with gcc, if something as central as vector.reserve() give false positive
diagnostics then the sheer volume of warnings will render either the warning
or reserve() unusable.
I suggest to reopen PR19699 against libstdc++ (or maybe open a new one)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (3 preceding siblings ...)
2005-06-07 19:46 ` veksler at il dot ibm dot com
@ 2005-06-07 23:28 ` bangerth at dealii dot org
2005-06-08 13:20 ` [Bug libstdc++/21951] [4.0 only] " pinskia at gcc dot gnu dot org
` (10 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: bangerth at dealii dot org @ 2005-06-07 23:28 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bangerth at dealii dot org 2005-06-07 23:28 -------
I concur with the last post -- a dummy return at the end would solve
the problem and seems like an acceptable solution for a release
branch.
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Component|c++ |libstdc++
Resolution|DUPLICATE |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (4 preceding siblings ...)
2005-06-07 23:28 ` [Bug libstdc++/21951] " bangerth at dealii dot org
@ 2005-06-08 13:20 ` pinskia at gcc dot gnu dot org
2005-06-08 13:57 ` dank at kegel dot com
` (9 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-06-08 13:20 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-08 13:20 -------
Note Mark has said in the past (and in a private mail which was supposed to be a public one too) that
warnings cannot cause this to be a rejects valid.
--
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
Summary|[gcc-4.0 regression, |[4.0 only]
|rejects-valid] |std::vector.reserve()
|std::vector.reserve() |unusable with -Werror -Wall
|unusable with -Werror -Wall |-O -fno-exceptions
|-O -fno-exceptions |
Target Milestone|--- |4.0.2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (5 preceding siblings ...)
2005-06-08 13:20 ` [Bug libstdc++/21951] [4.0 only] " pinskia at gcc dot gnu dot org
@ 2005-06-08 13:57 ` dank at kegel dot com
2005-06-08 14:11 ` veksler at il dot ibm dot com
` (8 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: dank at kegel dot com @ 2005-06-08 13:57 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dank at kegel dot com 2005-06-08 13:57 -------
It sure as hell is for those shops that require -Werror.
But ok, I'll be happy if it's fixed for 4.0.2.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (6 preceding siblings ...)
2005-06-08 13:57 ` dank at kegel dot com
@ 2005-06-08 14:11 ` veksler at il dot ibm dot com
2005-06-08 14:43 ` veksler at il dot ibm dot com
` (7 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: veksler at il dot ibm dot com @ 2005-06-08 14:11 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From veksler at il dot ibm dot com 2005-06-08 14:11 -------
(In reply to comment #6)
> Note Mark has said in the past (and in a private mail which was supposed to be
a public one too) that
> warnings cannot cause this to be a rejects valid.
For the same reason, PR 21183 should be reopened or merged with this PR:
> When compiling a C++ program with -Wall, I get the following compiler warning
>
>/usr/local/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/bits/stl_uninitialized.h:113:
>warning: control may reach end of non-void function '_ForwardIterator
> std::__uninitialized_copy_aux(_InputIterator, _InputIterator,
...
> The problem seems to be in __uninitialized_copy_aux() in stl_uninitialized.h
>
> The catch statement block beginning on line 89 merely exits the routine without
> actually returning a value.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (7 preceding siblings ...)
2005-06-08 14:11 ` veksler at il dot ibm dot com
@ 2005-06-08 14:43 ` veksler at il dot ibm dot com
2005-06-08 19:16 ` bkoz at gcc dot gnu dot org
` (6 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: veksler at il dot ibm dot com @ 2005-06-08 14:43 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From veksler at il dot ibm dot com 2005-06-08 14:43 -------
(In reply to comment #7)
> It sure as hell is for those shops that require -Werror.
>
> But ok, I'll be happy if it's fixed for 4.0.2.
I think that your argument (as phrased) does not hold.
Maybe you meant "It sure as hell is for those shops that require -Werror,
in this particular instance".
(Pardon my language, I just quoted the original ;-)
Consider:
1. 1: int main()
2: {
3: int a;
4: never_return(); // the halting problem
5: return a; // Uninitialized variable?
6: }
This is perfectly valid code and well defined, yet -Wall -Werror
will reject it. No compiler will ever be able to determine if
line 5 is ever reached.
2. 1: int main()
2: {
3: int a;
4: if(foo())
5: a= bar();
6: if(foo())
7: return a; // Uninitialized variable?
8: return 0;
9: }
Again, no compiler will be able to prove that a nontrivial foo() does
not change over time (unless declared const/pure/whatever).
And as a result, -Wall -Werror will reject valid code.
In both examples, the user has a simple work-around, initialize 'a'.
Adding initialization will make the code more stable, as foo() is
no longer constrained to be const/pure (forgive me for not remembering if
it is called pure or const).
In contrast (as mentioned in comment #4), this PR and PR 21183 do not
give the user the tools to shut this specific diagnostic instance up.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (8 preceding siblings ...)
2005-06-08 14:43 ` veksler at il dot ibm dot com
@ 2005-06-08 19:16 ` bkoz at gcc dot gnu dot org
2005-06-11 11:25 ` dank at kegel dot com
` (5 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: bkoz at gcc dot gnu dot org @ 2005-06-08 19:16 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bkoz at gcc dot gnu dot org 2005-06-08 19:16 -------
This is a compiler bug. If they don't fix it in 4.0.x, then we'll have to work
around it in libstdc++ 4.0 sources only.
People have suggested a patch to add a dummy return. If that's posted, it seems
to be perfectly acceptable to me. I suggest that be posted...
-benjamin
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (9 preceding siblings ...)
2005-06-08 19:16 ` bkoz at gcc dot gnu dot org
@ 2005-06-11 11:25 ` dank at kegel dot com
2005-06-11 19:29 ` dank at kegel dot com
` (4 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: dank at kegel dot com @ 2005-06-11 11:25 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dank at kegel dot com 2005-06-11 11:25 -------
OK, I'm testing a patch now.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (10 preceding siblings ...)
2005-06-11 11:25 ` dank at kegel dot com
@ 2005-06-11 19:29 ` dank at kegel dot com
2005-06-12 15:02 ` pinskia at gcc dot gnu dot org
` (3 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: dank at kegel dot com @ 2005-06-11 19:29 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dank at kegel dot com 2005-06-11 19:29 -------
Created an attachment (id=9071)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=9071&action=view)
proposed workaround
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (11 preceding siblings ...)
2005-06-11 19:29 ` dank at kegel dot com
@ 2005-06-12 15:02 ` pinskia at gcc dot gnu dot org
2005-07-01 19:10 ` geoffk at gcc dot gnu dot org
` (2 subsequent siblings)
15 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-06-12 15:02 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-06-12 15:02:26
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (12 preceding siblings ...)
2005-06-12 15:02 ` pinskia at gcc dot gnu dot org
@ 2005-07-01 19:10 ` geoffk at gcc dot gnu dot org
2005-07-01 19:42 ` dank at kegel dot com
2005-07-16 21:12 ` pinskia at gcc dot gnu dot org
15 siblings, 0 replies; 18+ messages in thread
From: geoffk at gcc dot gnu dot org @ 2005-07-01 19:10 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From geoffk at gcc dot gnu dot org 2005-07-01 19:10 -------
I have a patch for the compiler here:
http://gcc.gnu.org/ml/gcc-patches/2005-07/msg00049.html
which will fix this problem.
--
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |geoffk at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
Last reconfirmed|2005-06-12 15:02:26 |2005-07-01 19:10:02
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (13 preceding siblings ...)
2005-07-01 19:10 ` geoffk at gcc dot gnu dot org
@ 2005-07-01 19:42 ` dank at kegel dot com
2005-07-16 21:12 ` pinskia at gcc dot gnu dot org
15 siblings, 0 replies; 18+ messages in thread
From: dank at kegel dot com @ 2005-07-01 19:42 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dank at kegel dot com 2005-07-01 19:42 -------
That's certainly prettier than my header changes.
I'll give it a shot. Thanks!
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Bug libstdc++/21951] [4.0 only] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions
2005-06-07 17:58 [Bug c++/21951] New: [gcc-4.0 regression, rejects-valid] std::vector.reserve() unusable with -Werror -Wall -O -fno-exceptions dank at kegel dot com
` (14 preceding siblings ...)
2005-07-01 19:42 ` dank at kegel dot com
@ 2005-07-16 21:12 ` pinskia at gcc dot gnu dot org
15 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-07-16 21:12 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-07-16 21:00 -------
Fixed by:
2005-07-08 Geoffrey Keating <geoffk@apple.com>
* tree-inline.c (expand_call_inline): Prevent 'may reach end'
warning in system headers.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21951
^ permalink raw reply [flat|nested] 18+ messages in thread