]> granicus.if.org Git - clang/commitdiff
Fixes a code gen bug related to accessing a now
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 15 Dec 2009 21:34:52 +0000 (21:34 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 15 Dec 2009 21:34:52 +0000 (21:34 +0000)
non-existing 'isa' field of a non-existing struct type
all related to legacy type definition for 'id' which we have
dropped in clang in favor of a built-in type.
(fixes radar 7470820).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91455 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExpr.cpp
lib/Sema/SemaExpr.cpp
test/CodeGenObjC/id-isa-codegen.m

index 8e1413386af499885a8f05133bef09921db6e0ac..c5a89e032b29466e7fdf14eaecf02d583c253899 100644 (file)
@@ -1389,6 +1389,7 @@ LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) {
   case CastExpr::CK_NoOp:
   case CastExpr::CK_ConstructorConversion:
   case CastExpr::CK_UserDefinedConversion:
+  case CastExpr::CK_AnyPointerToObjCPointerCast:
     return EmitLValue(E->getSubExpr());
   
   case CastExpr::CK_DerivedToBase: {
index cda27cf68716483cbcea63493d690b4401fe2102..65c95b36aa0756157ce1a3fde38b37147d60ee9d 100644 (file)
@@ -3584,7 +3584,9 @@ static CastExpr::CastKind getScalarCastKind(ASTContext &Context,
 
   if (SrcTy->hasPointerRepresentation()) {
     if (DestTy->hasPointerRepresentation())
-      return CastExpr::CK_BitCast;
+      return DestTy->isObjCObjectPointerType() ? 
+                CastExpr::CK_AnyPointerToObjCPointerCast : 
+                CastExpr::CK_BitCast;
     if (DestTy->isIntegerType())
       return CastExpr::CK_PointerToIntegral;
   }
index dc0bac3000e74f49fad16ca23c226defd5f7bd6a..89e992209071e912d7f401323f9e85f603387d77 100644 (file)
@@ -25,3 +25,12 @@ typedef struct objc_object {
 }
 @end
 
+
+// rdar 7470820
+static Class MyClass;
+
+Class Test(const void *inObject1) {
+  if(((id)inObject1)->isa == MyClass)
+   return ((id)inObject1)->isa;
+  return (id)0;
+}