forked from OSchip/llvm-project
Quash a TODO related to catching pointer-to-member. These tests fail on my copy of gcc-4.2. But I believe the tests to be correct (and they pass for libc++abi). I've enquired on the C++ standards mailing list for a clarification in case I'm wrong. So far I've gotten one response that agrees with me.
llvm-svn: 149534
This commit is contained in:
parent
72e6ce5aa9
commit
2d6810fbd6
|
@ -380,8 +380,7 @@ __vmi_class_type_info::has_unambiguous_public_base(__dynamic_cast_info* info,
|
|||
}
|
||||
}
|
||||
|
||||
// Handles bullets 1 and 4
|
||||
// TODO: Are we good to go here for __pointer_to_member_type_info?
|
||||
// Handles bullets 1 and 4 for both pointers and member pointers
|
||||
bool
|
||||
__pbase_type_info::can_catch(const __shim_type_info* thrown_type,
|
||||
void*&) const
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
//===----------------- catch_member_data_pointer_01.cpp -------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <cassert>
|
||||
|
||||
struct A
|
||||
{
|
||||
const int i;
|
||||
int j;
|
||||
};
|
||||
|
||||
typedef const int A::*md1;
|
||||
typedef int A::*md2;
|
||||
|
||||
void test1()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &A::i;
|
||||
assert(false);
|
||||
}
|
||||
catch (md2)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (md1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void test2()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &A::j;
|
||||
assert(false);
|
||||
}
|
||||
catch (md1)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (md2)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test1();
|
||||
test2();
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
//===--------------- catch_member_function_pointer_01.cpp -----------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <cassert>
|
||||
|
||||
struct A
|
||||
{
|
||||
void foo() {}
|
||||
void bar() const {}
|
||||
};
|
||||
|
||||
typedef void (A::*mf1)();
|
||||
typedef void (A::*mf2)() const;
|
||||
|
||||
void test1()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &A::foo;
|
||||
assert(false);
|
||||
}
|
||||
catch (mf2)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (mf1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void test2()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &A::bar;
|
||||
assert(false);
|
||||
}
|
||||
catch (mf1)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (mf2)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test1();
|
||||
test2();
|
||||
}
|
Loading…
Reference in New Issue