This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/48829] g++ no warning initializing a variable using itself
- From: "egallager at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 18 Aug 2017 15:54:31 +0000
- Subject: [Bug c++/48829] g++ no warning initializing a variable using itself
- Auto-submitted: auto-generated
- References: <bug-48829-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48829
Eric Gallager <egallager at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-08-18
CC| |egallager at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #2 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to matferib from comment #0)
> This code issues a warning:
>
> g++ -Wall
> int i = 5 + i;
> warning: ‘i’ may be used uninitialized in this function
>
> This code does not:
> string s = string("str") + s;
>
> Neither this:
> string s(string("str") + s);
>
> Shouldnt the 2 last ones issue warnings too?
(In reply to Jonathan Wakely from comment #1)
> The string case calls a function (the overloaded operator+ or std::string)
> so is actually closer to:
>
> int f(int);
> int i = f(i);
>
> which doesn't warn either (although it should do, ideally)
>
> This is similar to PR 48483, maybe even a dup.
So, I combined all the snippets into a single testcase, and g++ doesn't even
warn on the first one anymore:
$ cat 48829.cc
#include <string>
using namespace std;
int i = 5 + i;
string s = string("str") + s;
string ss(string("str") + ss);
int f(int);
int ii = f(ii);
$ /usr/local/bin/g++ -c -Wall -Wextra -pedantic -Wuninitialized -Winit-self
-Weffc++ -O2 48829.cc
$
Same with all other optimization levels I tried. So, confirmed.