(I looked for duplicate -Wuninitialized bugs but didn't see anything similar)

In the attached minimized testcase I get a clear 'is used uninitialized'
warning downgraded to a 'may be used uninitialized' warning on unrelated code
changes.

The program compiles correctly with the following flags: -O3 -Wall
To move one function definition into a namespace, add -DBAD_NAMESPACE and get
the wrong warning.
Reordering/removing/adding/changing the sizes of local variables makes the
warning restore to 'is used uninitialized', one example can be enabled by
-DGOOD_ORDER

This is a regression since 4.3 as 4.2 always gives a 'is used uninitialized'
warning. I tested with the following compilers from SVN on amd64 and x86
architectures:

g++-trunk (GCC) 4.6.0 20100901 (experimental) ==> BAD
g++-4.5.x (GCC) 4.5.2 20100901 (prerelease) ==> BAD
g++-4.4.x (GCC) 4.4.5 20100824 (prerelease) ==> BAD
g++-4.3.x (GCC) 4.3.6 20100824 (prerelease) ==> BAD
g++-4.2.x (GCC) 4.2.5 20090330 (prerelease) ==> OK

+ g++-4.5.x -std=c++0x -O3 -Wall -c PRmbuuitf.cpp
PRmbuuitf.cpp: In function 'void test()':
PRmbuuitf.cpp:66:25: warning: 'b$t$MBUUITF' is used uninitialized in this
function
PRmbuuitf.cpp:64:5: note: 'b$t$MBUUITF' was declared here
+ g++-4.5.x -std=c++0x -O3 -Wall -c PRmbuuitf.cpp -DBAD_NAMESPACE
PRmbuuitf.cpp: In function 'void test()':
                                            vvv
PRmbuuitf.cpp:66:25: warning: 'b$t$MBUUITF' may be used uninitialized in this
function
                                            ^^^
PRmbuuitf.cpp:64:5: note: 'b$t$MBUUITF' was declared here
+ g++-4.5.x -std=c++0x -O3 -Wall -c PRmbuuitf.cpp -DBAD_NAMESPACE -DGOOD_ORDER
PRmbuuitf.cpp: In function 'void test()':
PRmbuuitf.cpp:66:25: warning: 'b$t$MBUUITF' is used uninitialized in this
function
PRmbuuitf.cpp:64:5: note: 'b$t$MBUUITF' was declared here

+ g++-4.2.x -O3 -Wall -c PRmbuuitf.cpp -DBAD_NAMESPACE
PRmbuuitf.cpp: In function 'void test()':
PRmbuuitf.cpp:66: warning: 'b.B::t.T::MBUUITF' is used uninitialized in this
function
PRmbuuitf.cpp:64: note: 'b.B::t.T::MBUUITF' was declared here


-- 
           Summary: 'is used uninitialized' becomes 'may be used
                    uninitialized' on unrelated code changes (namespace
                    addition)
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: gcc at abeckmann dot de


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45609

Reply via email to