diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CodeGenCXX/rtti-layout.cpp | 14 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/rtti-linkage.cpp | 19 |
2 files changed, 28 insertions, 5 deletions
diff --git a/clang/test/CodeGenCXX/rtti-layout.cpp b/clang/test/CodeGenCXX/rtti-layout.cpp index 3e97592ada1..c8326bbd893 100644 --- a/clang/test/CodeGenCXX/rtti-layout.cpp +++ b/clang/test/CodeGenCXX/rtti-layout.cpp @@ -20,17 +20,21 @@ return static_cast<const T&>(info); } struct Incomplete; -#define CHECK(x) if ((x)) return __LINE__; +struct A { }; + +#define CHECK(x) if (!(x)) return __LINE__; // CHECK: define i32 @_Z1fv() int f() { // Pointers to incomplete classes. - CHECK(to<__pbase_type_info>(typeid(Incomplete *)).__flags != __pbase_type_info::__incomplete_mask); - CHECK(to<__pbase_type_info>(typeid(Incomplete **)).__flags != __pbase_type_info::__incomplete_mask); - CHECK(to<__pbase_type_info>(typeid(Incomplete ***)).__flags != __pbase_type_info::__incomplete_mask); + CHECK(to<__pbase_type_info>(typeid(Incomplete *)).__flags == __pbase_type_info::__incomplete_mask); + CHECK(to<__pbase_type_info>(typeid(Incomplete **)).__flags == __pbase_type_info::__incomplete_mask); + CHECK(to<__pbase_type_info>(typeid(Incomplete ***)).__flags == __pbase_type_info::__incomplete_mask); // Member pointers. - CHECK(to<__pbase_type_info>(typeid(int Incomplete::*)).__flags != __pbase_type_info::__incomplete_class_mask); + CHECK(to<__pbase_type_info>(typeid(int Incomplete::*)).__flags == __pbase_type_info::__incomplete_class_mask); + CHECK(to<__pbase_type_info>(typeid(Incomplete Incomplete::*)).__flags == (__pbase_type_info::__incomplete_class_mask | __pbase_type_info::__incomplete_mask)); + CHECK(to<__pbase_type_info>(typeid(Incomplete A::*)).__flags == (__pbase_type_info::__incomplete_mask)); // Success! // CHECK: ret i32 0 diff --git a/clang/test/CodeGenCXX/rtti-linkage.cpp b/clang/test/CodeGenCXX/rtti-linkage.cpp index 22e859d69c9..5b4a8e42dd6 100644 --- a/clang/test/CodeGenCXX/rtti-linkage.cpp +++ b/clang/test/CodeGenCXX/rtti-linkage.cpp @@ -9,6 +9,19 @@ // CHECK: _ZTIP1C = internal constant // CHECK: _ZTSPP1C = internal constant // CHECK: _ZTIPP1C = internal constant +// CHECK: _ZTSM1Ci = internal constant +// CHECK: _ZTIM1Ci = internal constant +// CHECK: _ZTSPM1Ci = internal constant +// CHECK: _ZTIPM1Ci = internal constant +// CHECK: _ZTSM1CS_ = internal constant +// CHECK: _ZTIM1CS_ = internal constant +// CHECK: _ZTSM1CPS_ = internal constant +// CHECK: _ZTIM1CPS_ = internal constant +// CHECK: _ZTSM1A1C = internal constant +// CHECK: _ZTIM1A1C = internal constant +// CHECK: _ZTSM1AP1C = internal constant +// CHECK: _ZTIM1AP1C = internal constant + // A has no key function, so its RTTI data should be weak_odr. struct A { }; @@ -26,6 +39,12 @@ struct C; void f() { (void)typeid(C*); (void)typeid(C**); + (void)typeid(int C::*); + (void)typeid(int C::**); + (void)typeid(C C::*); + (void)typeid(C *C::*); + (void)typeid(C A::*); + (void)typeid(C* A::*); } |