public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/58377] New: spurious "may be unused" warning with -Og
@ 2013-09-10  9:35 rbd at debian dot org
  2013-09-10 10:02 ` [Bug c++/58377] " paolo.carlini at oracle dot com
                   ` (14 more replies)
  0 siblings, 15 replies; 16+ messages in thread
From: rbd at debian dot org @ 2013-09-10  9:35 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 58377
           Summary: spurious "may be unused" warning with -Og
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rbd at debian dot org

The following code generates a spurious " ‘out’ may be used uninitialized in
this function" warning when built with -Og; no optimization, -O1, -O2, -O3 and
-Ofast all do not warn.

// gcc -Og -std=c++0x -Wall -Werror -c xx.cpp

struct ordered_tasks
{
    int * pop ();
};

struct A
{
    ordered_tasks * tasks[];
    int * pop ();
};

int pop_first_bucket;

int * A::pop ()
{
    int * out;
    int cur_bucket = 0;

    do {
        if (tasks[0]) {
            out = tasks[cur_bucket]->pop();
            if (out)
                return out;
        }
    } while (pop_first_bucket);

    return 0;
}

output / details of my system:

$ gcc -v -Og -std=c++0x -Wall -Werror -c xx.cpp
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.8.1-10ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.8 --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin
--with-system-zlib --disable-browser-plugin --enable-java-awt=gtk
--enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
--enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686
--with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu1) 
COLLECT_GCC_OPTIONS='-v' '-Og' '-std=c++11' '-Wall' '-Werror' '-c' '-E'
'-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1plus -E -quiet -v -imultiarch
x86_64-linux-gnu -D_GNU_SOURCE xx.cpp -mtune=generic -march=x86-64 -std=c++11
-Wall -Werror -Og -fstack-protector -Wformat -Wformat-security
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/4.8"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.8
 /usr/include/x86_64-linux-gnu/c++/4.8
 /usr/include/c++/4.8/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-Og' '-std=c++11' '-Wall' '-Werror' '-c' '-E'
'-mtune=generic' '-march=x86-64'
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.8.1-10ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.8 --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin
--with-system-zlib --disable-browser-plugin --enable-java-awt=gtk
--enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
--enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686
--with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu1) 
COLLECT_GCC_OPTIONS='-v' '-Og' '-std=c++11' '-Wall' '-Werror' '-c' '-o'
'/home/roland/.ccache/4/3/9782563fbf89cd86ac0377b998dd1c-3528.o.tmp.roland-t410s.18048'
'-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1plus -fpreprocessed
/home/roland/.ccache/tmp/xx.tmp.roland-t410s.18048.ii -quiet -dumpbase
xx.tmp.roland-t410s.18048.ii -mtune=generic -march=x86-64 -auxbase-strip
/home/roland/.ccache/4/3/9782563fbf89cd86ac0377b998dd1c-3528.o.tmp.roland-t410s.18048
-Og -Wall -Werror -std=c++11 -version -fstack-protector -Wformat
-Wformat-security -o /tmp/ccZi8CJF.s
GNU C++ (Ubuntu/Linaro 4.8.1-10ubuntu1) version 4.8.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.1-p2,
MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++ (Ubuntu/Linaro 4.8.1-10ubuntu1) version 4.8.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.1-p2,
MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: bbda97c7f6a737ad1364ffd9676a3180
xx.cpp: In member function ‘int* A::pop()’:
xx.cpp:18:11: error: ‘out’ may be used uninitialized in this function
[-Werror=maybe-uninitialized]
     int * out;
           ^
cc1plus: all warnings being treated as errors
>From gcc-bugs-return-429424-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Tue Sep 10 09:36:51 2013
Return-Path: <gcc-bugs-return-429424-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 20425 invoked by alias); 10 Sep 2013 09:36:51 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 20199 invoked by uid 48); 10 Sep 2013 09:36:48 -0000
From: "markus at trippelsdorf dot de" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/58373] [4.9 Regression] g++: internal compiler error: Segmentation fault (program cc1plus)
Date: Tue, 10 Sep 2013 09:36:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: tree-optimization
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: markus at trippelsdorf dot de
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: 4.9.0
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields:
Message-ID: <bug-58373-4-v9nMkEqIFq@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58373-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58373-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-09/txt/msg00664.txt.bz2
Content-length: 327

http://gcc.gnu.org/bugzilla/show_bug.cgi?idX373

--- Comment #3 from Markus Trippelsdorf <markus at trippelsdorf dot de> ---
(In reply to Richard Biener from comment #2)
> Looks like cc1plus being miscompiled - does it reproduce with stage1 cc1plus?

Yes. It reproduces with --disable-bootstrap builds using 4.7.3 or 4.8.1.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be unused" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
@ 2013-09-10 10:02 ` paolo.carlini at oracle dot com
  2013-09-10 10:31 ` rbd at debian dot org
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: paolo.carlini at oracle dot com @ 2013-09-10 10:02 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> ---
I can't reproduce this issue with stock FSF GCCs. In any case, it doesn't look
like a C++ front-end issue, I would recommend preparing an equivalent pure C
program for the convenience of middle-end people (changing pop to be free
standing functions and little more should be enough). Often I do that kind of
work but I can't reproduce the issue in the first place in this case.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be unused" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
  2013-09-10 10:02 ` [Bug c++/58377] " paolo.carlini at oracle dot com
@ 2013-09-10 10:31 ` rbd at debian dot org
  2013-09-10 10:40 ` rbd at debian dot org
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: rbd at debian dot org @ 2013-09-10 10:31 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Roland Dreier <rbd at debian dot org> ---
arg, I really apologize.  I copied and pasted from the wrong window and ended
up with a test case that does NOT reproduce the issue, even on my system.  Here
is one I triple checked does fail (and everything is copied from one window, so
the code is definitely what I built):

$ cat x.cpp
// gcc -Og -Wall -Werror -c x.cpp

int * pop ();

struct A
{
    void * tasks[0];
};

int pop_first_bucket;

int * my_pop (struct A * t)
{
    int * out;

    do {
        if (t->tasks[0] && (out = pop()))
            return out;
    } while (pop_first_bucket);
    return 0;
}

$ gcc -v -Og -Wall -Werror -c x.cpp

Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.8.1-10ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.8 --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin
--with-system-zlib --disable-browser-plugin --enable-java-awt=gtk
--enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
--enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686
--with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu1) 
COLLECT_GCC_OPTIONS='-v' '-Og' '-Wall' '-Werror' '-c' '-E' '-mtune=generic'
'-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1plus -E -quiet -v -imultiarch
x86_64-linux-gnu -D_GNU_SOURCE x.cpp -mtune=generic -march=x86-64 -Wall -Werror
-Og -fstack-protector -Wformat -Wformat-security
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/4.8"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.8
 /usr/include/x86_64-linux-gnu/c++/4.8
 /usr/include/c++/4.8/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-Og' '-Wall' '-Werror' '-c' '-E' '-mtune=generic'
'-march=x86-64'
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.8.1-10ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.8 --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin
--with-system-zlib --disable-browser-plugin --enable-java-awt=gtk
--enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
--enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686
--with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu1) 
COLLECT_GCC_OPTIONS='-v' '-Og' '-Wall' '-Werror' '-c' '-o'
'/home/roland/.ccache/0/5/a073b86e9bd44947a6de1615bfe6ad-3402.o.tmp.roland-t410s.19701'
'-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1plus -fpreprocessed
/home/roland/.ccache/tmp/x.tmp.roland-t410s.19701.ii -quiet -dumpbase
x.tmp.roland-t410s.19701.ii -mtune=generic -march=x86-64 -auxbase-strip
/home/roland/.ccache/0/5/a073b86e9bd44947a6de1615bfe6ad-3402.o.tmp.roland-t410s.19701
-Og -Wall -Werror -version -fstack-protector -Wformat -Wformat-security -o
/tmp/cce01AiI.s
GNU C++ (Ubuntu/Linaro 4.8.1-10ubuntu1) version 4.8.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.1-p2,
MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++ (Ubuntu/Linaro 4.8.1-10ubuntu1) version 4.8.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.1-p2,
MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: bbda97c7f6a737ad1364ffd9676a3180
x.cpp: In function ‘int* my_pop(A*)’:
x.cpp:14:11: error: ‘out’ may be used uninitialized in this function
[-Werror=maybe-uninitialized]
     int * out;
           ^
cc1plus: all warnings being treated as errors



Interestingly enough, although as you suggested, I converted the test case to
be valid as C, it does not warn when compiled as Cg:

$ cp x.cpp x.c
$ gcc -Og -Wall -Werror -c x.c
$ gcc -std=c99 -Og -Wall -Werror -c x.c
$ gcc -std=c11 -Og -Wall -Werror -c x.c

all succeed with no warnings...


Furthermore, my previous experiments (which led to my mistake in opening this
report), shows that the following change from one if with conditions combined
with && to nested ifs builds fine with -Og as well:

int * pop ();

struct A
{
    void * tasks[0];
};

int pop_first_bucket;

int * my_pop (struct A * t)
{
    int * out;

    do {
        if (t->tasks[0])
            if ((out = pop()))
                return out;
    } while (pop_first_bucket);
    return 0;
}
>From gcc-bugs-return-429440-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Tue Sep 10 10:32:42 2013
Return-Path: <gcc-bugs-return-429440-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 2121 invoked by alias); 10 Sep 2013 10:32:42 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 2084 invoked by uid 48); 10 Sep 2013 10:32:40 -0000
From: "ktietz at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug rtl-optimization/38614] ICE at simplify-rtx.c:4956
Date: Tue, 10 Sep 2013 10:32:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: rtl-optimization
X-Bugzilla-Version: 4.4.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: ktietz at gcc dot gnu.org
X-Bugzilla-Status: RESOLVED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_status cc resolution
Message-ID: <bug-38614-4-OgzZvTS2pj@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-38614-4@http.gcc.gnu.org/bugzilla/>
References: <bug-38614-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-09/txt/msg00680.txt.bz2
Content-length: 632

http://gcc.gnu.org/bugzilla/show_bug.cgi?id8614

Kai Tietz <ktietz at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |ktietz at gcc dot gnu.org
         Resolution|---                         |WONTFIX

--- Comment #4 from Kai Tietz <ktietz at gcc dot gnu.org> ---
If this issue occurs with more recent gcc-version, please open an new bug.  gcc
4.4 is no longer maintained (same as gcc 4.5).
So closing this bug


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be unused" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
  2013-09-10 10:02 ` [Bug c++/58377] " paolo.carlini at oracle dot com
  2013-09-10 10:31 ` rbd at debian dot org
@ 2013-09-10 10:40 ` rbd at debian dot org
  2013-09-10 11:40 ` paolo.carlini at oracle dot com
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: rbd at debian dot org @ 2013-09-10 10:40 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Roland Dreier <rbd at debian dot org> ---
Even simpler test case for me:

$ cat x.cpp 
// gcc -Og -Wall -Werror -c x.cpp

int pop ();
int pop_first_bucket;

int my_pop ()
{
    int out;

    while (pop_first_bucket)
        if (pop_first_bucket && (out = pop()))
            return out;

    return 0;
}

$ for o in Og O0 O1 O2 O3 Ofast; do echo === $o ===; gcc -$o -Wall -Werror -c
x.cpp; done
=== Og ===
x.cpp: In function ‘int my_pop()’:
x.cpp:8:9: error: ‘out’ may be used uninitialized in this function
[-Werror=maybe-uninitialized]
     int out;
         ^
cc1plus: all warnings being treated as errors
=== O0 ===
=== O1 ===
=== O2 ===
=== O3 ===
=== Ofast ===

Does not error when built as x.c:

$ cp x.cpp x.c; for o in Og O0 O1 O2 O3 Ofast; do echo === $o ===; gcc -$o
-Wall -Werror -c x.c; done
=== Og ===
=== O0 ===
=== O1 ===
=== O2 ===
=== O3 ===
=== Ofast ===
>From gcc-bugs-return-429445-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Tue Sep 10 10:45:38 2013
Return-Path: <gcc-bugs-return-429445-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 12589 invoked by alias); 10 Sep 2013 10:45:38 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 12552 invoked by uid 48); 10 Sep 2013 10:45:35 -0000
From: "ktietz at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/53485] gcc -O -mavx generates illegal instruction on win64
Date: Tue, 10 Sep 2013 10:45:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: target
X-Bugzilla-Version: 4.6.3
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: ktietz at gcc dot gnu.org
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-53485-4-RWbT8345Yv@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-53485-4@http.gcc.gnu.org/bugzilla/>
References: <bug-53485-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-09/txt/msg00685.txt.bz2
Content-length: 530

http://gcc.gnu.org/bugzilla/show_bug.cgi?idS485

Kai Tietz <ktietz at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ktietz at gcc dot gnu.org

--- Comment #2 from Kai Tietz <ktietz at gcc dot gnu.org> ---
yes, it is an alignment issue.  Try to set explicit alignment for this global.
That it doesn't fail for 32-bit is just by chance.
This seems to me an OP issue.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be unused" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (2 preceding siblings ...)
  2013-09-10 10:40 ` rbd at debian dot org
@ 2013-09-10 11:40 ` paolo.carlini at oracle dot com
  2013-09-10 12:03 ` rguenth at gcc dot gnu.org
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: paolo.carlini at oracle dot com @ 2013-09-10 11:40 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Paolo Carlini <paolo.carlini at oracle dot com> ---
This one works for me but only with 4.8.x, not with mainline, and -Og didn't
exist in 4.7.x, thus it would not qualify as a regression, I'm afraid.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be unused" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (3 preceding siblings ...)
  2013-09-10 11:40 ` paolo.carlini at oracle dot com
@ 2013-09-10 12:03 ` rguenth at gcc dot gnu.org
  2013-09-10 15:57 ` [Bug c++/58377] spurious "may be used uninitialized" " davidxl at google dot com
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-10 12:03 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
      Known to work|                            |4.9.0
            Version|unknown                     |4.8.1
   Last reconfirmed|                            |2013-09-10
          Component|middle-end                  |c++
                 CC|                            |xinliangli at gmail dot com
     Ever confirmed|0                           |1
            Summary|spurious "may be used       |spurious "may be unused"
                   |uninitialized" warning with |warning with -Og
                   |-Og                         |

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed with the C++ FE, works with the C FE.  Does not warn on trunk (for
no good reason I think, the reason seems to be presence of loop structure
and thus some extra BBs).

Difference:

trunk:

[WORKLIST]: add to initial list: out_2 = PHI <out_8(D)(2), out_1(8)>
[CHECK]: examining phi: out_2 = PHI <out_8(D)(2), out_1(8)>

Use in stmt out_1 = PHI <out_12(4), out_12(5), out_2(3)>
is guarded by :
if (pop_first_bucket.2_10 != 0)

[CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>

[CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
Operand defs of phi out_2 = PHI <out_8(D)(2), out_1(8)>
is guarded by :
if (out_12 != 0)
[CHECK]: Found unguarded use: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
[WORKLIST]: Update worklist with phi: out_1 = PHI <out_12(4), out_12(5),
out_2(3)>
[CHECK]: examining phi: out_1 = PHI <out_12(4), out_12(5), out_2(3)>

Use in stmt out_2 = PHI <out_8(D)(2), out_1(8)>
is guarded by :
 (.NOT.) if (iftmp.1_3 != 0)

[CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>

[CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
Operand defs of phi out_1 = PHI <out_12(4), out_12(5), out_2(3)>
is guarded by :
if (pop_first_bucket.2_10 != 0)
(.AND.)
if (out_12 != 0)
(.OR.)
if (pop_first_bucket.2_10 != 0)
(.AND.)
 (.NOT.) if (out_12 != 0)

Normalized to
Operand defs of phi out_1 = PHI <out_12(4), out_12(5), out_2(3)>
is guarded by :
if (pop_first_bucket.2_10 != 0)
...

vs. 4.8 branch:

[WORKLIST]: add to initial list: out_2 = PHI <out_8(D)(2), out_1(6)>
[CHECK]: examining phi: out_2 = PHI <out_8(D)(2), out_1(6)>

Use in stmt out_1 = PHI <out_12(4), out_12(5), out_2(3)>
is guarded by :
if (pop_first_bucket.2_10 != 0)

[CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>

[CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
Operand defs of phi out_2 = PHI <out_8(D)(2), out_1(6)>
is guarded by :
if (out_12 != 0)
[CHECK]: Found unguarded use: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
[WORKLIST]: Update worklist with phi: out_1 = PHI <out_12(4), out_12(5),
out_2(3)>
[CHECK]: examining phi: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
[CHECK]: Found unguarded use: out_2 = PHI <out_8(D)(2), out_1(6)>
[CHECK]: Found unguarded use: _4 = PHI <out_1(6), 0(7)>
[WORKLIST]: Update worklist with phi: _4 = PHI <out_1(6), 0(7)>
[CHECK]: examining phi: _4 = PHI <out_1(6), 0(7)>
[CHECK]: Found unguarded use: return _4;

The IL difference is that we have

  <bb 6>:
  # out_1 = PHI <out_12(4), out_12(5), out_2(3)>
  # iftmp.1_3 = PHI <1(4), 0(5), 0(3)>
  if (iftmp.1_3 != 0)
    goto <bb 7>;
  else
    goto <bb 8>;

  <bb 7>:
  out_13 = out_1;
  goto <bb 10>;
...
  <bb 10>:
  # _4 = PHI <out_13(7), 0(9)>
  return _4;

which doesn't warn vs.

  <bb 6>:
  # out_1 = PHI <out_12(4), out_12(5), out_2(3)>
  # iftmp.1_3 = PHI <1(4), 0(5), 0(3)>
  if (iftmp.1_3 != 0)
    goto <bb 8>;
  else
    goto <bb 7>;
...
  <bb 8>:
  # _4 = PHI <out_1(6), 0(7)>
  return _4;

which does.  The issue seems to be that the analysis doesn't consider
the PHI uses in

  if (iftmp.1_3 != 0)
    goto <bb 8>;
  else
    goto <bb 7>;

  <bb 7>:
  # out_2 = PHI <out_8(D)(2), out_1(6)>

guarded by anything (the out_1 use is guarded by iftmp.1_3 == 0).

David - the code does

      if (gimple_code (use_stmt) == GIMPLE_PHI)
        use_bb = gimple_phi_arg_edge (use_stmt,
                                      PHI_ARG_INDEX_FROM_USE (use_p))->src;
      else
        use_bb = gimple_bb (use_stmt);

      if (is_use_properly_guarded (use_stmt,
                                   use_bb,
...

so it chooses the source block (as approximation?).

Splitting all edges results in us no longer warning here and:

Use in stmt out_2 = PHI <out_8(D)(15), out_1(16)>
is guarded by :
 (.NOT.) if (iftmp.1_3 != 0)

Can you see to fix that please?  Thanks.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (4 preceding siblings ...)
  2013-09-10 12:03 ` rguenth at gcc dot gnu.org
@ 2013-09-10 15:57 ` davidxl at google dot com
  2013-09-10 19:46 ` nvachhar at google dot com
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: davidxl at google dot com @ 2013-09-10 15:57 UTC (permalink / raw)
  To: gcc-bugs

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

davidxl at google dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |davidxl at google dot com

--- Comment #6 from davidxl at google dot com ---
There are some spurious PHIs (for out) with -g.

Bad dot file (-g):

digraph "t.cc.153t.uninit2" {
overlap=false;
subgraph "int my_pop()" {
    color="black";
    label="int my_pop()";
    fn_0_basic_block_1
[shape=Mdiamond,style=filled,fillcolor=white,label="EXIT"];

    fn_0_basic_block_2 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:880 |\<bb\ 2\>:\l\
goto\ \<bb\ 7\>;\l\
}"];

    fn_0_basic_block_7 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:10000 |\<bb\ 7\>:\l\
|#\ out_2\ =\ PHI\ \<out_8(D)(2),\ out_1(6)\>\l\
|pop_first_bucket.2_10\ =\ pop_first_bucket;\l\
|if\ (pop_first_bucket.2_10\ !=\ 0)\l\
\ \ goto\ \<bb\ 3\>;\l\
else\l\
\ \ goto\ \<bb\ 8\>;\l\
}"];

    fn_0_basic_block_3 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:9550 |\<bb\ 3\>:\l\
|if\ (pop_first_bucket.2_10\ !=\ 0)\l\
\ \ goto\ \<bb\ 4\>;\l\
else\l\
\ \ goto\ \<bb\ 6\>;\l\
}"];

    fn_0_basic_block_4 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:2769 |\<bb\ 4\>:\l\
|out_12\ =\ pop\ ();\l\
|if\ (out_12\ !=\ 0)\l\
\ \ goto\ \<bb\ 6\>;\l\
else\l\
\ \ goto\ \<bb\ 5\>;\l\
}"];

    fn_0_basic_block_5 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:2520 |\<bb\ 5\>:\l\
}"];

    fn_0_basic_block_6 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:9550 |\<bb\ 6\>:\l\
|#\ out_1\ =\ PHI\ \<out_12(4),\ out_12(5),\ out_2(3)\>\l\
|#\ iftmp.1_3\ =\ PHI\ \<1(4),\ 0(5),\ 0(3)\>\l\
|if\ (iftmp.1_3\ !=\ 0)\l\
\ \ goto\ \<bb\ 8\>;\l\
else\l\
\ \ goto\ \<bb\ 7\>;\l\
}"];

    fn_0_basic_block_8 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:880 |\<bb\ 8\>:\l\
|#\ _4\ =\ PHI\ \<out_1(6),\ 0(7)\>\l\
|return\ _4;\l\
}"];

    fn_0_basic_block_0
[shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];

    fn_0_basic_block_0:s -> fn_0_basic_block_2:n
[style="solid,bold",color=blue,weight=100,constraint=true, label="[100%]"];
    fn_0_basic_block_2:s -> fn_0_basic_block_7:n
[style="solid,bold",color=blue,weight=100,constraint=true, label="[100%]"];
    fn_0_basic_block_3:s -> fn_0_basic_block_4:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[29%]"];
    fn_0_basic_block_3:s -> fn_0_basic_block_6:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[71%]"];
    fn_0_basic_block_4:s -> fn_0_basic_block_6:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[9%]"];
    fn_0_basic_block_4:s -> fn_0_basic_block_5:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[91%]"];
    fn_0_basic_block_5:s -> fn_0_basic_block_6:n
[style="solid,bold",color=blue,weight=100,constraint=true, label="[100%]"];
    fn_0_basic_block_6:s -> fn_0_basic_block_8:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[4%]"];
    fn_0_basic_block_6:s -> fn_0_basic_block_7:n
[style="dotted,bold",color=blue,weight=10,constraint=false, label="[95%]"];
    fn_0_basic_block_7:s -> fn_0_basic_block_3:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[95%]"];
    fn_0_basic_block_7:s -> fn_0_basic_block_8:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[4%]"];
    fn_0_basic_block_8:s -> fn_0_basic_block_1:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[100%]"];
    fn_0_basic_block_0:s -> fn_0_basic_block_1:n
[style="invis",constraint=true];
}
}


GCC reports unguarded use of out at return statement. return value is defined
by

 _4 = PHI (out_1(6), 0(7))

where

out_1 = PHI (out_12 (4), out_12 (5), out_2 (3))

where

out_2 = PHI (out_8(D)(2), out_1 (6))

This phi introduces uninitialized variable use.


To compare, the good dot file is :

digraph "t.cc.133t.uninit1" {
overlap=false;
subgraph "int my_pop()" {
    color="black";
    label="int my_pop()";
    subgraph cluster_0_1 {
    style="filled";
    color="darkgreen";
    fillcolor="grey88";
    label="loop 1";
    labeljust=l;
    penwidth=2;
    fn_0_basic_block_5 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:10000 |\<bb\ 5\>:\l\
|pop_first_bucket.2_10\ =\ pop_first_bucket;\l\
|if\ (pop_first_bucket.2_10\ !=\ 0)\l\
\ \ goto\ \<bb\ 3\>;\l\
else\l\
\ \ goto\ \<bb\ 6\>;\l\
}"];

    fn_0_basic_block_3 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:2769 |\<bb\ 3\>:\l\
|out_12\ =\ pop\ ();\l\
|if\ (out_12\ !=\ 0)\l\
\ \ goto\ \<bb\ 6\>;\l\
else\l\
\ \ goto\ \<bb\ 4\>;\l\
}"];

    fn_0_basic_block_4 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:2520 |\<bb\ 4\>:\l\
}"];

    }
    fn_0_basic_block_0
[shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];

    fn_0_basic_block_1
[shape=Mdiamond,style=filled,fillcolor=white,label="EXIT"];

    fn_0_basic_block_2 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:880 |\<bb\ 2\>:\l\
goto\ \<bb\ 5\>;\l\
}"];

    fn_0_basic_block_6 [shape=record,style=filled,fillcolor=lightgrey,label="{
FREQ:880 |\<bb\ 6\>:\l\
|#\ _4\ =\ PHI\ \<out_12(3),\ 0(5)\>\l\
|return\ _4;\l\
}"];

    fn_0_basic_block_0:s -> fn_0_basic_block_2:n
[style="solid,bold",color=blue,weight=100,constraint=true, label="[100%]"];
    fn_0_basic_block_2:s -> fn_0_basic_block_5:n
[style="solid,bold",color=blue,weight=100,constraint=true, label="[100%]"];
    fn_0_basic_block_3:s -> fn_0_basic_block_6:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[9%]"];
    fn_0_basic_block_3:s -> fn_0_basic_block_4:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[91%]"];
    fn_0_basic_block_4:s -> fn_0_basic_block_5:n
[style="dotted,bold",color=blue,weight=10,constraint=false, label="[100%]"];
    fn_0_basic_block_5:s -> fn_0_basic_block_3:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[95%]"];
    fn_0_basic_block_5:s -> fn_0_basic_block_6:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[4%]"];
    fn_0_basic_block_6:s -> fn_0_basic_block_1:n
[style="solid,bold",color=black,weight=10,constraint=true, label="[100%]"];
    fn_0_basic_block_0:s -> fn_0_basic_block_1:n
[style="invis",constraint=true];
}
}


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (5 preceding siblings ...)
  2013-09-10 15:57 ` [Bug c++/58377] spurious "may be used uninitialized" " davidxl at google dot com
@ 2013-09-10 19:46 ` nvachhar at google dot com
  2013-09-10 20:14 ` davidxl at google dot com
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: nvachhar at google dot com @ 2013-09-10 19:46 UTC (permalink / raw)
  To: gcc-bugs

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

Neil Vachharajani <nvachhar at google dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nvachhar at google dot com

--- Comment #7 from Neil Vachharajani <nvachhar at google dot com> ---
It seems like the whole problem is that the loop early exit goes through bb_6
which is the same path the back-edge goes through.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (6 preceding siblings ...)
  2013-09-10 19:46 ` nvachhar at google dot com
@ 2013-09-10 20:14 ` davidxl at google dot com
  2013-09-10 20:23 ` davidxl at google dot com
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: davidxl at google dot com @ 2013-09-10 20:14 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from davidxl at google dot com ---
(In reply to Neil Vachharajani from comment #7)
> It seems like the whole problem is that the loop early exit goes through
> bb_6 which is the same path the back-edge goes through.

There is also one thing weird about the trunk GCC's IR


Why is constant 0 propagated into the PHI node?

_4 = PHI <out_13(7), 0(9)>

>From the CFG, it should be like

_4 = PHI <out_13(7), out_2(9)>   ?


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (7 preceding siblings ...)
  2013-09-10 20:14 ` davidxl at google dot com
@ 2013-09-10 20:23 ` davidxl at google dot com
  2013-09-10 23:08 ` davidxl at google dot com
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: davidxl at google dot com @ 2013-09-10 20:23 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #9 from davidxl at google dot com ---
(In reply to Richard Biener from comment #5)
> Confirmed with the C++ FE, works with the C FE.  Does not warn on trunk (for
> no good reason I think, the reason seems to be presence of loop structure
> and thus some extra BBs).
> 
> Difference:
> 
> trunk:
> 
> [WORKLIST]: add to initial list: out_2 = PHI <out_8(D)(2), out_1(8)>
> [CHECK]: examining phi: out_2 = PHI <out_8(D)(2), out_1(8)>
> 
> Use in stmt out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> is guarded by :
> if (pop_first_bucket.2_10 != 0)
> 
> [CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> 
> [CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> Operand defs of phi out_2 = PHI <out_8(D)(2), out_1(8)>
> is guarded by :
> if (out_12 != 0)
> [CHECK]: Found unguarded use: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> [WORKLIST]: Update worklist with phi: out_1 = PHI <out_12(4), out_12(5),
> out_2(3)>
> [CHECK]: examining phi: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> 
> Use in stmt out_2 = PHI <out_8(D)(2), out_1(8)>
> is guarded by :
>  (.NOT.) if (iftmp.1_3 != 0)
> 
> [CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> 
> [CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> Operand defs of phi out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> is guarded by :
> if (pop_first_bucket.2_10 != 0)
> (.AND.)
> if (out_12 != 0)
> (.OR.)
> if (pop_first_bucket.2_10 != 0)
> (.AND.)
>  (.NOT.) if (out_12 != 0)
> 
> Normalized to
> Operand defs of phi out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> is guarded by :
> if (pop_first_bucket.2_10 != 0)
> ...
> 
> vs. 4.8 branch:
> 
> [WORKLIST]: add to initial list: out_2 = PHI <out_8(D)(2), out_1(6)>
> [CHECK]: examining phi: out_2 = PHI <out_8(D)(2), out_1(6)>
> 
> Use in stmt out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> is guarded by :
> if (pop_first_bucket.2_10 != 0)
> 
> [CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> 
> [CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> Operand defs of phi out_2 = PHI <out_8(D)(2), out_1(6)>
> is guarded by :
> if (out_12 != 0)
> [CHECK]: Found unguarded use: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> [WORKLIST]: Update worklist with phi: out_1 = PHI <out_12(4), out_12(5),
> out_2(3)>
> [CHECK]: examining phi: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> [CHECK]: Found unguarded use: out_2 = PHI <out_8(D)(2), out_1(6)>
> [CHECK]: Found unguarded use: _4 = PHI <out_1(6), 0(7)>
> [WORKLIST]: Update worklist with phi: _4 = PHI <out_1(6), 0(7)>
> [CHECK]: examining phi: _4 = PHI <out_1(6), 0(7)>
> [CHECK]: Found unguarded use: return _4;
> 
> The IL difference is that we have
> 
>   <bb 6>:
>   # out_1 = PHI <out_12(4), out_12(5), out_2(3)>
>   # iftmp.1_3 = PHI <1(4), 0(5), 0(3)>
>   if (iftmp.1_3 != 0)
>     goto <bb 7>;
>   else
>     goto <bb 8>;
> 
>   <bb 7>:
>   out_13 = out_1;
>   goto <bb 10>;
> ...
>   <bb 10>:
>   # _4 = PHI <out_13(7), 0(9)>
>   return _4;
> 
> which doesn't warn vs.
> 
>   <bb 6>:
>   # out_1 = PHI <out_12(4), out_12(5), out_2(3)>
>   # iftmp.1_3 = PHI <1(4), 0(5), 0(3)>
>   if (iftmp.1_3 != 0)
>     goto <bb 8>;
>   else
>     goto <bb 7>;
> ...
>   <bb 8>:
>   # _4 = PHI <out_1(6), 0(7)>
>   return _4;
> 
> which does.  The issue seems to be that the analysis doesn't consider
> the PHI uses in
> 
>   if (iftmp.1_3 != 0)
>     goto <bb 8>;
>   else
>     goto <bb 7>;
> 
>   <bb 7>:
>   # out_2 = PHI <out_8(D)(2), out_1(6)>
> 
> guarded by anything (the out_1 use is guarded by iftmp.1_3 == 0).
> 
> David - the code does
> 
>       if (gimple_code (use_stmt) == GIMPLE_PHI)
>         use_bb = gimple_phi_arg_edge (use_stmt,
>                                       PHI_ARG_INDEX_FROM_USE (use_p))->src;
>       else
>         use_bb = gimple_bb (use_stmt);
> 
>       if (is_use_properly_guarded (use_stmt,
>                                    use_bb,
> ...
> 
> so it chooses the source block (as approximation?).
> 
> Splitting all edges results in us no longer warning here and:
> 
> Use in stmt out_2 = PHI <out_8(D)(15), out_1(16)>
> is guarded by :
>  (.NOT.) if (iftmp.1_3 != 0)
> 
> Can you see to fix that please?  Thanks.


Your analysis is correct -- the use is indeed guarded. I forgot why I chose to
use the phi arg's source BB. Will take a look.

David


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (8 preceding siblings ...)
  2013-09-10 20:23 ` davidxl at google dot com
@ 2013-09-10 23:08 ` davidxl at google dot com
  2013-09-11  8:25 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: davidxl at google dot com @ 2013-09-10 23:08 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #10 from davidxl at google dot com ---

When an incoming edge to a phi is a critical edge, the 'use BB' for the phi arg
should be in the split BB of the edge. Pushing the use into either the Source
BB  or the dest BB will result in extending the 'use' falsely in more BBs.  In
this case, simply use the PHI's BB won't solve the problem, as there is an
incoming path introduced not guarded by if (iftmp.1_3 != 0)

I don't see a good way to fix it unless splitting the edge.

David


(In reply to davidxl from comment #9)
> (In reply to Richard Biener from comment #5)
> > Confirmed with the C++ FE, works with the C FE.  Does not warn on trunk (for
> > no good reason I think, the reason seems to be presence of loop structure
> > and thus some extra BBs).
> > 
> > Difference:
> > 
> > trunk:
> > 
> > [WORKLIST]: add to initial list: out_2 = PHI <out_8(D)(2), out_1(8)>
> > [CHECK]: examining phi: out_2 = PHI <out_8(D)(2), out_1(8)>
> > 
> > Use in stmt out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > is guarded by :
> > if (pop_first_bucket.2_10 != 0)
> > 
> > [CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > 
> > [CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > Operand defs of phi out_2 = PHI <out_8(D)(2), out_1(8)>
> > is guarded by :
> > if (out_12 != 0)
> > [CHECK]: Found unguarded use: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > [WORKLIST]: Update worklist with phi: out_1 = PHI <out_12(4), out_12(5),
> > out_2(3)>
> > [CHECK]: examining phi: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > 
> > Use in stmt out_2 = PHI <out_8(D)(2), out_1(8)>
> > is guarded by :
> >  (.NOT.) if (iftmp.1_3 != 0)
> > 
> > [CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > 
> > [CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > Operand defs of phi out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > is guarded by :
> > if (pop_first_bucket.2_10 != 0)
> > (.AND.)
> > if (out_12 != 0)
> > (.OR.)
> > if (pop_first_bucket.2_10 != 0)
> > (.AND.)
> >  (.NOT.) if (out_12 != 0)
> > 
> > Normalized to
> > Operand defs of phi out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > is guarded by :
> > if (pop_first_bucket.2_10 != 0)
> > ...
> > 
> > vs. 4.8 branch:
> > 
> > [WORKLIST]: add to initial list: out_2 = PHI <out_8(D)(2), out_1(6)>
> > [CHECK]: examining phi: out_2 = PHI <out_8(D)(2), out_1(6)>
> > 
> > Use in stmt out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > is guarded by :
> > if (pop_first_bucket.2_10 != 0)
> > 
> > [CHECK] Found def edge 0 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > 
> > [CHECK] Found def edge 1 in out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > Operand defs of phi out_2 = PHI <out_8(D)(2), out_1(6)>
> > is guarded by :
> > if (out_12 != 0)
> > [CHECK]: Found unguarded use: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > [WORKLIST]: Update worklist with phi: out_1 = PHI <out_12(4), out_12(5),
> > out_2(3)>
> > [CHECK]: examining phi: out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> > [CHECK]: Found unguarded use: out_2 = PHI <out_8(D)(2), out_1(6)>
> > [CHECK]: Found unguarded use: _4 = PHI <out_1(6), 0(7)>
> > [WORKLIST]: Update worklist with phi: _4 = PHI <out_1(6), 0(7)>
> > [CHECK]: examining phi: _4 = PHI <out_1(6), 0(7)>
> > [CHECK]: Found unguarded use: return _4;
> > 
> > The IL difference is that we have
> > 
> >   <bb 6>:
> >   # out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> >   # iftmp.1_3 = PHI <1(4), 0(5), 0(3)>
> >   if (iftmp.1_3 != 0)
> >     goto <bb 7>;
> >   else
> >     goto <bb 8>;
> > 
> >   <bb 7>:
> >   out_13 = out_1;
> >   goto <bb 10>;
> > ...
> >   <bb 10>:
> >   # _4 = PHI <out_13(7), 0(9)>
> >   return _4;
> > 
> > which doesn't warn vs.
> > 
> >   <bb 6>:
> >   # out_1 = PHI <out_12(4), out_12(5), out_2(3)>
> >   # iftmp.1_3 = PHI <1(4), 0(5), 0(3)>
> >   if (iftmp.1_3 != 0)
> >     goto <bb 8>;
> >   else
> >     goto <bb 7>;
> > ...
> >   <bb 8>:
> >   # _4 = PHI <out_1(6), 0(7)>
> >   return _4;
> > 
> > which does.  The issue seems to be that the analysis doesn't consider
> > the PHI uses in
> > 
> >   if (iftmp.1_3 != 0)
> >     goto <bb 8>;
> >   else
> >     goto <bb 7>;
> > 
> >   <bb 7>:
> >   # out_2 = PHI <out_8(D)(2), out_1(6)>
> > 
> > guarded by anything (the out_1 use is guarded by iftmp.1_3 == 0).
> > 
> > David - the code does
> > 
> >       if (gimple_code (use_stmt) == GIMPLE_PHI)
> >         use_bb = gimple_phi_arg_edge (use_stmt,
> >                                       PHI_ARG_INDEX_FROM_USE (use_p))->src;
> >       else
> >         use_bb = gimple_bb (use_stmt);
> > 
> >       if (is_use_properly_guarded (use_stmt,
> >                                    use_bb,
> > ...
> > 
> > so it chooses the source block (as approximation?).
> > 
> > Splitting all edges results in us no longer warning here and:
> > 
> > Use in stmt out_2 = PHI <out_8(D)(15), out_1(16)>
> > is guarded by :
> >  (.NOT.) if (iftmp.1_3 != 0)
> > 
> > Can you see to fix that please?  Thanks.
> 
> 
> Your analysis is correct -- the use is indeed guarded. I forgot why I chose
> to use the phi arg's source BB. Will take a look.
> 
> David


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (9 preceding siblings ...)
  2013-09-10 23:08 ` davidxl at google dot com
@ 2013-09-11  8:25 ` rguenth at gcc dot gnu.org
  2013-09-11 12:20 ` rguenth at gcc dot gnu.org
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-11  8:25 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to davidxl from comment #10)
> When an incoming edge to a phi is a critical edge, the 'use BB' for the phi
> arg should be in the split BB of the edge. Pushing the use into either the
> Source BB  or the dest BB will result in extending the 'use' falsely in more
> BBs.  In this case, simply use the PHI's BB won't solve the problem, as
> there is an incoming path introduced not guarded by if (iftmp.1_3 != 0)
> 
> I don't see a good way to fix it unless splitting the edge.

I wondered if we can make is_use_properly_guarded take the case of a use
on an edge into account by simply injecting the predicate at the end of
the predecessor into the list of predicates found by find_predicates.

Hmm, but I see it's not a simple list of predicates ...

I wonder what effect splitting critical edges somewhere before late
uninit has on following optimization passes and RTL expansion and its
out-of-SSA process (though the next cfgcleanup pass will unsplit the
edges again, which is at latest pass_cleanup_cfg_post_optimizing)

But I can confirm that the testcase is fixed with

Index: gcc/passes.c
===================================================================
--- gcc/passes.c        (revision 202445)
+++ gcc/passes.c        (working copy)
@@ -1543,6 +1543,7 @@ init_optimization_passes (void)
       /* ???  We do want some kind of loop invariant motion, but we possibly
          need to adjust LIM to be more friendly towards preserving accurate
         debug information here.  */
+      NEXT_PASS (pass_split_crit_edges);
       NEXT_PASS (pass_late_warn_uninitialized);
       NEXT_PASS (pass_uncprop);
       NEXT_PASS (pass_local_pure_const);

which does this just for -Og.

I'm seriously considering this, splitting critical edges is cheap.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (10 preceding siblings ...)
  2013-09-11  8:25 ` rguenth at gcc dot gnu.org
@ 2013-09-11 12:20 ` rguenth at gcc dot gnu.org
  2013-09-11 12:23 ` rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-11 12:20 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Wed Sep 11 12:20:07 2013
New Revision: 202496

URL: http://gcc.gnu.org/viewcvs?rev=202496&root=gcc&view=rev
Log:
2013-09-11  Richard Biener  <rguenther@suse.de>

    PR middle-end/58377
    * passes.def: Split critical edges before late uninit warning passes.
    * tree-cfg.c (pass_split_crit_edges): Implement clone method.

    * g++.dg/uninit-pred-4.C: New testcase.

Added:
    trunk/gcc/testsuite/g++.dg/uninit-pred-4.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/passes.def
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-cfg.c


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (11 preceding siblings ...)
  2013-09-11 12:20 ` rguenth at gcc dot gnu.org
@ 2013-09-11 12:23 ` rguenth at gcc dot gnu.org
  2013-09-11 12:23 ` rguenth at gcc dot gnu.org
  2013-09-12 13:21 ` rguenth at gcc dot gnu.org
  14 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-11 12:23 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|---                         |4.8.2
      Known to fail|                            |4.8.1

--- Comment #14 from Richard Biener <rguenth at gcc dot gnu.org> ---
Fixed.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (12 preceding siblings ...)
  2013-09-11 12:23 ` rguenth at gcc dot gnu.org
@ 2013-09-11 12:23 ` rguenth at gcc dot gnu.org
  2013-09-12 13:21 ` rguenth at gcc dot gnu.org
  14 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-11 12:23 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Wed Sep 11 12:23:15 2013
New Revision: 202498

URL: http://gcc.gnu.org/viewcvs?rev=202498&root=gcc&view=rev
Log:
2013-09-11  Richard Biener  <rguenther@suse.de>

    PR middle-end/58377
    * passes.c (init_optimization_passes): Split critical edges
    before late uninit warning pass in the -Og pipeline.

    * g++.dg/uninit-pred-4.C: New testcase.

Added:
    branches/gcc-4_8-branch/gcc/testsuite/g++.dg/uninit-pred-4.C
Modified:
    branches/gcc-4_8-branch/gcc/ChangeLog
    branches/gcc-4_8-branch/gcc/passes.c
    branches/gcc-4_8-branch/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug c++/58377] spurious "may be used uninitialized" warning with -Og
  2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
                   ` (13 preceding siblings ...)
  2013-09-11 12:23 ` rguenth at gcc dot gnu.org
@ 2013-09-12 13:21 ` rguenth at gcc dot gnu.org
  14 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-09-12 13:21 UTC (permalink / raw)
  To: gcc-bugs

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

Bug 58377 depends on bug 58402, which changed state.

Bug 58402 Summary: [4.9 regression] FAIL: gcc.dg/tree-ssa/phi-opt-1.c scan-tree-dump-times optimized "if" 0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58402

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-09-12 13:21 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-10  9:35 [Bug c++/58377] New: spurious "may be unused" warning with -Og rbd at debian dot org
2013-09-10 10:02 ` [Bug c++/58377] " paolo.carlini at oracle dot com
2013-09-10 10:31 ` rbd at debian dot org
2013-09-10 10:40 ` rbd at debian dot org
2013-09-10 11:40 ` paolo.carlini at oracle dot com
2013-09-10 12:03 ` rguenth at gcc dot gnu.org
2013-09-10 15:57 ` [Bug c++/58377] spurious "may be used uninitialized" " davidxl at google dot com
2013-09-10 19:46 ` nvachhar at google dot com
2013-09-10 20:14 ` davidxl at google dot com
2013-09-10 20:23 ` davidxl at google dot com
2013-09-10 23:08 ` davidxl at google dot com
2013-09-11  8:25 ` rguenth at gcc dot gnu.org
2013-09-11 12:20 ` rguenth at gcc dot gnu.org
2013-09-11 12:23 ` rguenth at gcc dot gnu.org
2013-09-11 12:23 ` rguenth at gcc dot gnu.org
2013-09-12 13:21 ` 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).