[cfe-commits] r63032 - in /cfe/trunk: lib/Sema/SemaType.cpp test/SemaCXX/member-pointer.cpp

Sebastian Redl sebastian.redl at getdesigned.at
Mon Jan 26 11:54:48 PST 2009


Author: cornedbee
Date: Mon Jan 26 13:54:48 2009
New Revision: 63032

URL: http://llvm.org/viewvc/llvm-project?rev=63032&view=rev
Log:
Remove an implemented FIXME and extend test cases. Follow-up on Doug's review.

Modified:
    cfe/trunk/lib/Sema/SemaType.cpp
    cfe/trunk/test/SemaCXX/member-pointer.cpp

Modified: cfe/trunk/lib/Sema/SemaType.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=63032&r1=63031&r2=63032&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaType.cpp (original)
+++ cfe/trunk/lib/Sema/SemaType.cpp Mon Jan 26 13:54:48 2009
@@ -642,15 +642,14 @@
   return T;
 }
 
-/// UnwrapSimilarPointerTypes - If T1 and T2 are pointer types (FIXME:
-/// or pointer-to-member types) that may be similar (C++ 4.4),
-/// replaces T1 and T2 with the type that they point to and return
-/// true. If T1 and T2 aren't pointer types or pointer-to-member
-/// types, or if they are not similar at this level, returns false and
-/// leaves T1 and T2 unchanged. Top-level qualifiers on T1 and T2 are
-/// ignored. This function will typically be called in a loop that
-/// successively "unwraps" pointer and pointer-to-member types to
-/// compare them at each level.
+/// UnwrapSimilarPointerTypes - If T1 and T2 are pointer types  that
+/// may be similar (C++ 4.4), replaces T1 and T2 with the type that
+/// they point to and return true. If T1 and T2 aren't pointer types
+/// or pointer-to-member types, or if they are not similar at this
+/// level, returns false and leaves T1 and T2 unchanged. Top-level
+/// qualifiers on T1 and T2 are ignored. This function will typically
+/// be called in a loop that successively "unwraps" pointer and
+/// pointer-to-member types to compare them at each level.
 bool Sema::UnwrapSimilarPointerTypes(QualType& T1, QualType& T2)
 {
   const PointerType *T1PtrType = T1->getAsPointerType(),

Modified: cfe/trunk/test/SemaCXX/member-pointer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/member-pointer.cpp?rev=63032&r1=63031&r2=63032&view=diff

==============================================================================
--- cfe/trunk/test/SemaCXX/member-pointer.cpp (original)
+++ cfe/trunk/test/SemaCXX/member-pointer.cpp Mon Jan 26 13:54:48 2009
@@ -4,6 +4,9 @@
 enum B { Dummy };
 namespace C {}
 struct D : A {};
+struct E : A {};
+struct F : D, E {};
+struct G : virtual D {};
 
 int A::*pdi1;
 int (::A::*pdi2);
@@ -29,4 +32,8 @@
   // Conversion to member of derived.
   int D::*pdid = pdi1;
   pdid = pdi2;
+
+  // Fail conversion due to ambiguity and virtuality.
+  int F::*pdif = pdi1; // expected-error {{ambiguous conversion from pointer to member of base class 'struct A' to pointer to member of derived class 'struct F'}} expected-error {{incompatible type}}
+  int G::*pdig = pdi1; // expected-error {{conversion from pointer to member of class 'struct A' to pointer to member of class 'struct G' via virtual base 'struct D' is not allowed}} expected-error {{incompatible type}}
 }





More information about the cfe-commits mailing list