+2016-07-20 Jonathan Wakely <jwakely@redhat.com>
+
+ * g++.dg/cpp0x/nullptr35.C: Change expected result for catching as
+ pointer to member function and also test catching by reference.
+
2016-07-20 Dominik Vogt <vogt@linux.vnet.ibm.com>
* gcc.target/s390/pr67443.c: Fix test case.
caught(4);
throw;
}
- } catch (int (A::*pmf)()) { // FIXME: currently unsupported
+ } catch (int (A::*pmf)()) {
if (pmf == nullptr)
caught(8);
throw;
} catch (nullptr_t) {
}
- if (result != 7) // should be 15
+ try {
+ try {
+ try {
+ try {
+ try {
+ throw nullptr;
+ } catch (void* const& p) {
+ if (p == nullptr)
+ caught(16);
+ throw;
+ }
+ } catch (void(* const& pf)()) {
+ if (pf == nullptr)
+ caught(32);
+ throw;
+ }
+ } catch (int A::* const& pm) {
+ if (pm == nullptr)
+ caught(64);
+ throw;
+ }
+ } catch (int (A::* const& pmf)()) {
+ if (pmf == nullptr)
+ caught(128);
+ throw;
+ }
+ } catch (nullptr_t) {
+ }
+
+ if (result != 255)
abort ();
}
+2016-07-20 Jonathan Wakely <jwakely@redhat.com>
+
+ * libsupc++/pbase_type_info.cc (__pbase_type_info::__do_catch): Use
+ static objects for catching nullptr as pointer to member types.
+
2016-07-18 Ville Voutilainen <ville.voutilainen@gmail.com>
Clean up optional's comments.
{
if (__pointee->__is_function_p ())
{
- // A pointer-to-member-function is two words <ptr,adj> but the
- // nullptr_t exception object at *(nullptr_t*)*thr_obj is only
- // one word, so we can't safely return it as a PMF. FIXME.
- return false;
+ using pmf_type = void (__pbase_type_info::*)();
+ static const pmf_type pmf = nullptr;
+ *thr_obj = const_cast<pmf_type*>(&pmf);
+ return true;
}
else
{
- *(ptrdiff_t*)*thr_obj = -1; // null pointer to data member
+ using pm_type = int __pbase_type_info::*;
+ static const pm_type pm = nullptr;
+ *thr_obj = const_cast<pm_type*>(&pm);
return true;
}
}