]> granicus.if.org Git - clang/commitdiff
Teach the ObjC mangler to ignore member pointers just like gcc does.
authorJohn McCall <rjmccall@apple.com>
Mon, 17 May 2010 23:56:34 +0000 (23:56 +0000)
committerJohn McCall <rjmccall@apple.com>
Mon, 17 May 2010 23:56:34 +0000 (23:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104001 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/CodeGenObjCXX/encode.mm

index cd567a6142e0a66ce88cfdd7c451d2a3a38687a7..11b4546e37c24aa7ae00dc8c25971b5e2bc69b77 100644 (file)
@@ -3715,6 +3715,11 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S,
     return;
   }
 
+  // gcc just blithely ignores member pointers.
+  // TODO: maybe there should be a mangling for these
+  if (T->getAs<MemberPointerType>())
+    return;
+
   assert(0 && "@encode for type not implemented!");
 }
 
index 9dfd14db052b069e18bd6fe8675fc9cbd128bfc8..4f472caa9cd193c8a2242c02165845f299b6714a 100644 (file)
@@ -2,7 +2,7 @@
 
 // CHECK: v17@0:8{vector<float, float, float>=}16
 // CHECK: {vector<float, float, float>=}
-
+// CHECK: v24@0:816
 
 template <typename T1, typename T2, typename T3> struct vector {
     vector(T1,T2,T3);
@@ -37,3 +37,15 @@ typedef vector< float, float, float > vector3f;
  [sn setPosition:VF3];
 }
 @end
+
+
+class Int3 { int x, y, z; };
+
+// Enforce @encoding for member pointers.
+@interface MemPtr {}
+- (void) foo: (int (Int3::*)) member;
+@end
+@implementation MemPtr
+- (void) foo: (int (Int3::*)) member {
+}
+@end