public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new
@ 2023-11-29 16:54 sss@li-snyder.org
2023-11-29 17:04 ` [Bug tree-optimization/112766] " mpolacek at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: sss@li-snyder.org @ 2023-11-29 16:54 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112766
Bug ID: 112766
Summary: [14 regression] spurious -Wmaybe-uninitialized with
array new
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sss@li-snyder.org
Target Milestone: ---
hi -
With a recent checkout of gcc14 (20231129), on a x86_64-pc-linux-gnu host,
the following source gives a bogus -Wmaybe-uninitialized warning
with -Wall:
--------------------------------------------------------------
void* operator new[](unsigned long, void* __p) ;
class Result
{
public:
Result();
~Result();
};
void *foo(long nElements, void *p) {
return p ? new((int*)p) Result[nElements] : new Result[nElements];
}
--------------------------------------------------------------
$ g++ -c -O1 -Wall x.cc
x.cc: In function ‘void* foo(long int, void*)’:
x.cc:11:67: warning: ‘nElements.6’ may be used uninitialized
[-Wmaybe-uninitialized]
11 | return p ? new((int*)p) Result[nElements] : new Result[nElements];
| ^
x.cc:11:58: note: ‘nElements.6’ was declared here
11 | return p ? new((int*)p) Result[nElements] : new Result[nElements];
| ^~~~~~~~~
We get the same warning with -O2 and -O3, but not -O0.
This warning does not occur with gcc 13.2.1 20230728.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new
2023-11-29 16:54 [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new sss@li-snyder.org
@ 2023-11-29 17:04 ` mpolacek at gcc dot gnu.org
2023-11-30 9:01 ` [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089 rguenth at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2023-11-29 17:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112766
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |14.0
Status|UNCONFIRMED |NEW
Keywords| |diagnostic
CC| |mpolacek at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
Ever confirmed|0 |1
Component|c++ |tree-optimization
Last reconfirmed| |2023-11-29
--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Started with r14-4089:
commit d45ddc2c04e471d0dcee016b6edacc00b8341b16
Author: Richard Biener <rguenther@suse.de>
Date: Thu Sep 14 13:06:51 2023 +0200
tree-optimization/111294 - backwards threader PHI costing
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089
2023-11-29 16:54 [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new sss@li-snyder.org
2023-11-29 17:04 ` [Bug tree-optimization/112766] " mpolacek at gcc dot gnu.org
@ 2023-11-30 9:01 ` rguenth at gcc dot gnu.org
2023-11-30 9:50 ` rguenth at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-11-30 9:01 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112766
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Keywords| |missed-optimization
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so one uninit use occurs on the exceptional path from Result::Result()
during the initialization loop of the allocated array, this then has
<bb 25> [count: 0]:
# _71 = PHI <_58(21), _42(D)(6), _42(D)(45), _42(D)(14), _42(D)(24)>
# _72 = PHI <_85(21), _43(D)(6), _43(D)(45), _43(D)(14), _43(D)(24)>
# _73 = PHI <_44(D)(21), _44(D)(6), _41(45), _44(D)(14), _44(D)(24)>
# nElements.2_74 = PHI <_17(21), _17(6), nElements.2_47(D)(45),
nElements.2_47(D)(14), _17(24)>
# cleanup.4_75 = PHI <1(21), 0(6), 0(45), 0(14), 0(24)>
# nElements.6_76 = PHI <nElements.6_56(D)(21), nElements.6_56(D)(6), _17(45),
_17(14), nElements.6_56(D)(24)>
# cleanup.7_77 = PHI <0(21), 0(6), 1(45), 0(14), 0(24)>
<L47>:
resx 3 // goes to L25
<L25>:
if (cleanup.7_77 != 0)
goto <bb 27>; [0.00%]
else
goto <bb 46>; [0.00%]
but somehow we are not seeing that cleanup.7_77 is 0 on all the paths
n_Elements.6_76 are uninitialized. (We're also not threading this
for unknown reasons, likely the threader not going up EH edges)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089
2023-11-29 16:54 [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new sss@li-snyder.org
2023-11-29 17:04 ` [Bug tree-optimization/112766] " mpolacek at gcc dot gnu.org
2023-11-30 9:01 ` [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089 rguenth at gcc dot gnu.org
@ 2023-11-30 9:50 ` rguenth at gcc dot gnu.org
2023-11-30 12:35 ` cvs-commit at gcc dot gnu.org
2023-11-30 12:35 ` rguenth at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-11-30 9:50 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112766
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
There's some logic in uninit_analysis::overlap, it looks incomplete.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089
2023-11-29 16:54 [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new sss@li-snyder.org
` (2 preceding siblings ...)
2023-11-30 9:50 ` rguenth at gcc dot gnu.org
@ 2023-11-30 12:35 ` cvs-commit at gcc dot gnu.org
2023-11-30 12:35 ` rguenth at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-11-30 12:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112766
--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rguenth@gcc.gnu.org>:
https://gcc.gnu.org/g:8a6062a47b33da6d961c6354fd5788bc46aef0a9
commit r14-6009-g8a6062a47b33da6d961c6354fd5788bc46aef0a9
Author: Richard Biener <rguenther@suse.de>
Date: Thu Nov 30 10:58:13 2023 +0100
tree-optimization/112766 - improve pruning of uninit diagnostics
Uninit diagnostics has code to prune based on incoming PHI args
that prove the uninit code is never executed. But that only
looks at the first found flag candidate while in the PRs case
only the second candidate would be the one to prune on. The
following patch makes us consider all of the flag candidates
which is cycles well spent IMHO.
PR tree-optimization/112766
* gimple-predicate-analysis.cc (find_var_cmp_const):
Support continuing the iteration and report every candidate.
(uninit_analysis::overlap): Iterate over all flag var
candidates.
* g++.dg/torture/uninit-pr112766.C: New testcase.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089
2023-11-29 16:54 [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new sss@li-snyder.org
` (3 preceding siblings ...)
2023-11-30 12:35 ` cvs-commit at gcc dot gnu.org
@ 2023-11-30 12:35 ` rguenth at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-11-30 12:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112766
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Fixed. Note it's a generally latent issue.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-11-30 12:35 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-29 16:54 [Bug c++/112766] New: [14 regression] spurious -Wmaybe-uninitialized with array new sss@li-snyder.org
2023-11-29 17:04 ` [Bug tree-optimization/112766] " mpolacek at gcc dot gnu.org
2023-11-30 9:01 ` [Bug tree-optimization/112766] [14 regression] spurious -Wmaybe-uninitialized with array new since r14-4089 rguenth at gcc dot gnu.org
2023-11-30 9:50 ` rguenth at gcc dot gnu.org
2023-11-30 12:35 ` cvs-commit at gcc dot gnu.org
2023-11-30 12:35 ` rguenth at gcc dot gnu.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).