public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99992] New: Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates
@ 2021-04-09 11:42 jakub at gcc dot gnu.org
  2021-04-09 13:47 ` [Bug c++/99992] " jakub at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-04-09 11:42 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 99992
           Summary: Diagnose C++11 constexpr body that isn't just return
                    even in uninstantiated templates
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
                CC: fdumont at gcc dot gnu.org, jakub at gcc dot gnu.org,
                    marxin at gcc dot gnu.org, redi at gcc dot gnu.org
        Depends on: 99985
  Target Milestone: ---

+++ This bug was initially created as a clone of Bug #99985 +++

template <typename T>
constexpr bool
foo (T x)
{
  if (x)
    return true;
  return false;
}

bool x = foo (0);

If I comment the last line, with -std=c++11 we don't diagnose the:
body of ‘constexpr’ function ‘...’ not a return-statement
error.  Could we (at least sometimes) diagnose this even on non-instantiated
templates?
That would help to catch the PR99985 libstdc++ bug more quickly.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99985
[Bug 99985] [10/11 Regression] bits/hashtable.h:483:9: error: body of
‘constexpr’ function ... not a return-statement since
g:1cbba49e3417d9b0661e70301d6fb7a7f52fd360

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

* [Bug c++/99992] Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates
  2021-04-09 11:42 [Bug c++/99992] New: Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates jakub at gcc dot gnu.org
@ 2021-04-09 13:47 ` jakub at gcc dot gnu.org
  2021-04-09 13:54 ` jakub at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-04-09 13:47 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
C++11 says:
"its function-body shall be = delete, = default, or a compound-statement that
contains only
— null statements,
— static_assert-declarations
— typedef declarations and alias-declarations that do not define classes or
enumerations,
— using-declarations,
— using-directives,
— and exactly one return statement;"
so perhaps if we on a constexpr function template see anything other than the
above ones, even if it e.g. could be some statement that is using some
parameter pack that would for empty pack instantiate to nothing, we could
diagnose it?

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

* [Bug c++/99992] Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates
  2021-04-09 11:42 [Bug c++/99992] New: Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates jakub at gcc dot gnu.org
  2021-04-09 13:47 ` [Bug c++/99992] " jakub at gcc dot gnu.org
@ 2021-04-09 13:54 ` jakub at gcc dot gnu.org
  2021-04-09 16:42 ` redi at gcc dot gnu.org
  2021-08-28 21:49 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-04-09 13:54 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So perhaps copy and tweak massage_constexpr_body and constexpr_fn_retval
such that it doesn't break_out_target_exprs but just return
non-NULL/error_mark_node on RETURN_EXPR and does something sensible for
DECL_CONSTRUCTORs (or initially handles only non-ctors?)?

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

* [Bug c++/99992] Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates
  2021-04-09 11:42 [Bug c++/99992] New: Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates jakub at gcc dot gnu.org
  2021-04-09 13:47 ` [Bug c++/99992] " jakub at gcc dot gnu.org
  2021-04-09 13:54 ` jakub at gcc dot gnu.org
@ 2021-04-09 16:42 ` redi at gcc dot gnu.org
  2021-08-28 21:49 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2021-04-09 16:42 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99992
Bug 99992 depends on bug 99985, which changed state.

Bug 99985 Summary: [9/10/11 Regression] bits/hashtable.h:483:9: error: body of ‘constexpr’ function ... not a return-statement since g:1cbba49e3417d9b0661e70301d6fb7a7f52fd360
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99985

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

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

* [Bug c++/99992] Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates
  2021-04-09 11:42 [Bug c++/99992] New: Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates jakub at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2021-04-09 16:42 ` redi at gcc dot gnu.org
@ 2021-08-28 21:49 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-28 21:49 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2021-08-28

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed, this is what clang reports:
<source>:6:3: error: use of this statement in a constexpr function is a C++14
extension [-Werror,-Wc++14-extensions]
  if (x)
  ^
<source>:8:3: error: multiple return statements in constexpr function is a
C++14 extension [-Werror,-Wc++14-extensions]
  return false;
  ^
<source>:7:5: note: previous return statement is here
    return true;
    ^

Maybe we should do something similar.

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

end of thread, other threads:[~2021-08-28 21:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-09 11:42 [Bug c++/99992] New: Diagnose C++11 constexpr body that isn't just return even in uninstantiated templates jakub at gcc dot gnu.org
2021-04-09 13:47 ` [Bug c++/99992] " jakub at gcc dot gnu.org
2021-04-09 13:54 ` jakub at gcc dot gnu.org
2021-04-09 16:42 ` redi at gcc dot gnu.org
2021-08-28 21:49 ` pinskia 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).