]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: ICE with throw inside concept [PR112437]
authorMarek Polacek <polacek@redhat.com>
Wed, 31 Jan 2024 22:33:26 +0000 (17:33 -0500)
committerMarek Polacek <polacek@redhat.com>
Thu, 1 Feb 2024 14:00:29 +0000 (09:00 -0500)
commit65b105b4f399559685200e1598ead8c7d0935c04
treebbc094289fa1a02d7c0d0ddc723333c295327e97
parentec217f7282cd4284cecda1c65a1e04323e6c8354
c++: ICE with throw inside concept [PR112437]

We crash in the loop at the end of treat_lvalue_as_rvalue_p for code
like

  template <class T>
  concept Throwable = requires(T x) { throw x; };

because the code assumes that we eventually reach sk_function_parms or
sk_try and bail, but in a concept we're in a sk_namespace.

We're already checking sk_try so we don't crash in a function-try-block,
but I've added a test anyway.

PR c++/112437

gcc/cp/ChangeLog:

* typeck.cc (treat_lvalue_as_rvalue_p): Bail out on sk_namespace in
the move on throw of parms loop.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-throw1.C: New test.
* g++.dg/eh/throw4.C: New test.
gcc/cp/typeck.cc
gcc/testsuite/g++.dg/cpp2a/concepts-throw1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/eh/throw4.C [new file with mode: 0644]