]> 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 15:49:32 +0000 (10:49 -0500)
commit4617c9b6eb22062a319dcdbddb8c3cebce398c15
treec28dd1ad38735929a239c52fe932dd6bb37e7dce
parent552a364102ebaee6d27708308984fd724cb32e19
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.

(cherry picked from commit 65b105b4f399559685200e1598ead8c7d0935c04)
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]