re PR c++/66684 (ICE in merge_exception_specifiers, at cp/typeck2.c:2114)
PR c++/66684 * typeck2.c (merge_exception_specifiers): Allow different noexcept-specifiers if we've had errors. From-SVN: r225086
This commit is contained in:
parent
7498239e97
commit
9579e906e2
3 changed files with 25 additions and 0 deletions
|
@ -1,5 +1,9 @@
|
|||
2015-06-26 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/66684
|
||||
* typeck2.c (merge_exception_specifiers): Allow different
|
||||
noexcept-specifiers if we've had errors.
|
||||
|
||||
PR c++/66255
|
||||
* pt.c (check_unstripped_args): Split out from...
|
||||
(retrieve_specialization): ...here. Allow typedefs in the type of
|
||||
|
|
|
@ -2112,6 +2112,7 @@ merge_exception_specifiers (tree list, tree add)
|
|||
return add;
|
||||
noex = TREE_PURPOSE (list);
|
||||
gcc_checking_assert (!TREE_PURPOSE (add)
|
||||
|| errorcount
|
||||
|| cp_tree_equal (noex, TREE_PURPOSE (add)));
|
||||
|
||||
/* Combine the dynamic-exception-specifiers, if any. */
|
||||
|
|
20
gcc/testsuite/g++.dg/cpp0x/noexcept28.C
Normal file
20
gcc/testsuite/g++.dg/cpp0x/noexcept28.C
Normal file
|
@ -0,0 +1,20 @@
|
|||
// PR c++/66684
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template<typename T>
|
||||
struct traits
|
||||
{
|
||||
static constexpr bool foo() { return sizeof(T) > 1; }
|
||||
static constexpr bool bar() { return sizeof(T) > 1; }
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct X
|
||||
{
|
||||
X& operator=(X&&) noexcept(traits<T>::foo());
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
X<T>&
|
||||
X<T>::operator=(X&&) noexcept(traits<T>::foo() && traits<T>::bar()) // { dg-error "different exception" }
|
||||
{ return *this; }
|
Loading…
Add table
Reference in a new issue