public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional
@ 2022-10-18 20:23 lvoege at gmail dot com
  2022-10-19  0:38 ` [Bug c++/107310] [12/13 Regression] " pinskia at gcc dot gnu.org
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: lvoege at gmail dot com @ 2022-10-18 20:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

            Bug ID: 107310
           Summary: "warning: control reaches end of non-void function"
                    with a throw under a trivially-true conditional
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lvoege at gmail dot com
  Target Milestone: ---

Created attachment 53727
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53727&action=edit
preprocessed test case

gcc 12 starting with revision a3e75c14 gives "warning: control reaches end of
non-void function" for the following contrived and I think minimal test case
when compiling without optimization. the preprocessed .ii file is attached for
completeness. remove any bit of it and it stops complaining.

    #include <mutex>

    std::mutex m;
    int t;

    int foo() {
        std::lock_guard guard(m);
        switch (t) {
        case 1: return 1;
        }
        if (true) {
            throw std::runtime_error("!");
        }
    }

this is on ubuntu, but a build from source does the same, as does yesterday's
trunk:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 12.2.0-3ubuntu1'
--with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs
--enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-12
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new
--enable-gnu-unique-object --disable-vtable-verify --enable-plugin
--enable-default-pie --with-system-zlib --enable-libphobos-checking=release
--with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch
--disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-12-U8K4Qv/gcc-12-12.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-12-U8K4Qv/gcc-12-12.2.0/debian/tmp-gcn/usr
--enable-offload-defaulted --without-cuda-driver --enable-checking=release
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (Ubuntu 12.2.0-3ubuntu1)

$ gcc -c foo3.cpp
foo3.cpp: In function ‘int foo()’:
foo3.cpp:14:1: warning: control reaches end of non-void function
[-Wreturn-type]
   14 | }
      | ^

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
@ 2022-10-19  0:38 ` pinskia at gcc dot gnu.org
  2022-10-19  0:39 ` pinskia at gcc dot gnu.org
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-10-19  0:38 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |12.1.0
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2022-10-19
      Known to work|                            |11.3.0
   Target Milestone|---                         |12.3
           Keywords|                            |diagnostic
     Ever confirmed|0                           |1
            Summary|"warning: control reaches   |[12/13 Regression]
                   |end of non-void function"   |"warning: control reaches
                   |with a throw under a        |end of non-void function"
                   |trivially-true conditional  |with a throw under a
                   |                            |trivially-true conditional

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed. reduced testcase:
struct f
{
    ~f();
};

int foo(int t) {
    f g;
    switch (t) {
        case 1: return 1;
    }
    if (true)
        throw 1;
}

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
  2022-10-19  0:38 ` [Bug c++/107310] [12/13 Regression] " pinskia at gcc dot gnu.org
@ 2022-10-19  0:39 ` pinskia at gcc dot gnu.org
  2022-10-19  6:53 ` [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50 marxin at gcc dot gnu.org
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-10-19  0:39 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note the warning happens at -O0 only.

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
  2022-10-19  0:38 ` [Bug c++/107310] [12/13 Regression] " pinskia at gcc dot gnu.org
  2022-10-19  0:39 ` pinskia at gcc dot gnu.org
@ 2022-10-19  6:53 ` marxin at gcc dot gnu.org
  2022-10-19  7:23 ` rguenth at gcc dot gnu.org
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: marxin at gcc dot gnu.org @ 2022-10-19  6:53 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |marxin at gcc dot gnu.org
            Summary|[12/13 Regression]          |[12/13 Regression]
                   |"warning: control reaches   |"warning: control reaches
                   |end of non-void function"   |end of non-void function"
                   |with a throw under a        |with a throw under a
                   |trivially-true conditional  |trivially-true conditional
                   |                            |since
                   |                            |r12-5638-ga3e75c1491cd2d50

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Started with r12-5638-ga3e75c1491cd2d50.

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (2 preceding siblings ...)
  2022-10-19  6:53 ` [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50 marxin at gcc dot gnu.org
@ 2022-10-19  7:23 ` rguenth at gcc dot gnu.org
  2022-11-16 16:35 ` jakub at gcc dot gnu.org
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2022-10-19  7:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (3 preceding siblings ...)
  2022-10-19  7:23 ` rguenth at gcc dot gnu.org
@ 2022-11-16 16:35 ` jakub at gcc dot gnu.org
  2023-03-14 16:16 ` jason at gcc dot gnu.org
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2022-11-16 16:35 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This is similar to C:
void bar (int *x);
__attribute__((noreturn)) void baz (void);

int
foo (void)
{
  int a __attribute__((cleanup (bar)));
  if (1)
    baz ();
}
on which we were at -O0 warning already in 4.7, haven't tried older compilers.
In C we optimizing the if (0) and if (1) conditions at genericization time,
only in C++ we were and now we no longer do.

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (4 preceding siblings ...)
  2022-11-16 16:35 ` jakub at gcc dot gnu.org
@ 2023-03-14 16:16 ` jason at gcc dot gnu.org
  2023-03-14 18:46 ` cvs-commit at gcc dot gnu.org
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: jason at gcc dot gnu.org @ 2023-03-14 16:16 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |jason at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

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

* [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (5 preceding siblings ...)
  2023-03-14 16:16 ` jason at gcc dot gnu.org
@ 2023-03-14 18:46 ` cvs-commit at gcc dot gnu.org
  2023-03-14 18:50 ` [Bug c++/107310] [12 " jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-03-14 18:46 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Jason Merrill <jason@gcc.gnu.org>:

https://gcc.gnu.org/g:71b33f8fb8daa6a7a359f322b24365d9016438fc

commit r13-6670-g71b33f8fb8daa6a7a359f322b24365d9016438fc
Author: Jason Merrill <jason@redhat.com>
Date:   Tue Mar 14 12:20:51 2023 -0400

    c++: -Wreturn-type with if (true) throw [PR107310]

    I removed this folding in GCC 12 because it was interfering with an
    experiment of richi's, but that never went in and the change causes
    regressions, so let's put it back.

    This reverts commit r12-5638-ga3e75c1491cd2d.

            PR c++/107310

    gcc/cp/ChangeLog:

            * cp-gimplify.cc (genericize_if_stmt): Restore folding
            of constant conditions.

    gcc/testsuite/ChangeLog:

            * c-c++-common/Wimplicit-fallthrough-39.c: Adjust warning.
            * g++.dg/warn/Wreturn-6.C: New test.

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

* [Bug c++/107310] [12 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (6 preceding siblings ...)
  2023-03-14 18:46 ` cvs-commit at gcc dot gnu.org
@ 2023-03-14 18:50 ` jason at gcc dot gnu.org
  2023-04-18 20:45 ` cvs-commit at gcc dot gnu.org
  2023-04-18 20:48 ` jason at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: jason at gcc dot gnu.org @ 2023-03-14 18:50 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[12/13 Regression]          |[12 Regression] "warning:
                   |"warning: control reaches   |control reaches end of
                   |end of non-void function"   |non-void function" with a
                   |with a throw under a        |throw under a
                   |trivially-true conditional  |trivially-true conditional
                   |since                       |since
                   |r12-5638-ga3e75c1491cd2d50  |r12-5638-ga3e75c1491cd2d50

--- Comment #6 from Jason Merrill <jason at gcc dot gnu.org> ---
Fixed for 13 so far.

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

* [Bug c++/107310] [12 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (7 preceding siblings ...)
  2023-03-14 18:50 ` [Bug c++/107310] [12 " jason at gcc dot gnu.org
@ 2023-04-18 20:45 ` cvs-commit at gcc dot gnu.org
  2023-04-18 20:48 ` jason at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-04-18 20:45 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Jason Merrill
<jason@gcc.gnu.org>:

https://gcc.gnu.org/g:0f6d443f0d0dd8a6bab99ab1957df3cd82541b27

commit r12-9432-g0f6d443f0d0dd8a6bab99ab1957df3cd82541b27
Author: Jason Merrill <jason@redhat.com>
Date:   Tue Mar 14 12:20:51 2023 -0400

    c++: -Wreturn-type with if (true) throw [PR107310]

    I removed this folding in GCC 12 because it was interfering with an
    experiment of richi's, but that never went in and the change causes
    regressions, so let's put it back.

    This reverts commit r12-5638-ga3e75c1491cd2d.

            PR c++/107310

    gcc/cp/ChangeLog:

            * cp-gimplify.cc (genericize_if_stmt): Restore folding
            of constant conditions.

    gcc/testsuite/ChangeLog:

            * c-c++-common/Wimplicit-fallthrough-39.c: Adjust warning.
            * g++.dg/warn/Wreturn-6.C: New test.

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

* [Bug c++/107310] [12 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50
  2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
                   ` (8 preceding siblings ...)
  2023-04-18 20:45 ` cvs-commit at gcc dot gnu.org
@ 2023-04-18 20:48 ` jason at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: jason at gcc dot gnu.org @ 2023-04-18 20:48 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107310

Jason Merrill <jason at gcc dot gnu.org> changed:

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

--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> ---
Fixed for 12.3/13.

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

end of thread, other threads:[~2023-04-18 20:48 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-18 20:23 [Bug c++/107310] New: "warning: control reaches end of non-void function" with a throw under a trivially-true conditional lvoege at gmail dot com
2022-10-19  0:38 ` [Bug c++/107310] [12/13 Regression] " pinskia at gcc dot gnu.org
2022-10-19  0:39 ` pinskia at gcc dot gnu.org
2022-10-19  6:53 ` [Bug c++/107310] [12/13 Regression] "warning: control reaches end of non-void function" with a throw under a trivially-true conditional since r12-5638-ga3e75c1491cd2d50 marxin at gcc dot gnu.org
2022-10-19  7:23 ` rguenth at gcc dot gnu.org
2022-11-16 16:35 ` jakub at gcc dot gnu.org
2023-03-14 16:16 ` jason at gcc dot gnu.org
2023-03-14 18:46 ` cvs-commit at gcc dot gnu.org
2023-03-14 18:50 ` [Bug c++/107310] [12 " jason at gcc dot gnu.org
2023-04-18 20:45 ` cvs-commit at gcc dot gnu.org
2023-04-18 20:48 ` jason 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).