diff --git a/clang/AST/StmtDumper.cpp b/clang/AST/StmtDumper.cpp index 66411f1730d6d77004e679414fa1d7a3351761f3..d813899b530e6eb9db9d9512008edc63bbf918ec 100644 --- a/clang/AST/StmtDumper.cpp +++ b/clang/AST/StmtDumper.cpp @@ -136,6 +136,7 @@ namespace { void VisitObjCMessageExpr(ObjCMessageExpr* Node); void VisitObjCSelectorExpr(ObjCSelectorExpr *Node); void VisitObjCProtocolExpr(ObjCProtocolExpr *Node); + void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node); }; } @@ -293,6 +294,13 @@ void StmtDumper::VisitDeclRefExpr(DeclRefExpr *Node) { fprintf(F, "='%s' %p", Node->getDecl()->getName(), (void*)Node->getDecl()); } +void StmtDumper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { + DumpExpr(Node->getBase()); + + fprintf(F, " ObjCIvarRefExpr"); + fprintf(F, "='%s' %p", Node->getDecl()->getName(), (void*)Node->getDecl()); +} + void StmtDumper::VisitPreDefinedExpr(PreDefinedExpr *Node) { DumpExpr(Node); switch (Node->getIdentType()) { diff --git a/clang/Driver/RewriteTest.cpp b/clang/Driver/RewriteTest.cpp index 6ad362a2a0b75e06c4ba41eb793d4388b4f6afa0..5e6d4262c037a7372099f2e21158aeb293032aba 100644 --- a/clang/Driver/RewriteTest.cpp +++ b/clang/Driver/RewriteTest.cpp @@ -281,7 +281,9 @@ void RewriteTest::Initialize(ASTContext &context) { S += "typedef struct objc_object Protocol;\n"; S += "#define _REWRITER_typedef_Protocol\n"; S += "#endif\n"; - S += "extern struct objc_object *objc_msgSend"; + if (LangOpts.Microsoft) + S += "extern \"C\" {\n"; + S += "struct objc_object *objc_msgSend"; S += "(struct objc_object *, struct objc_selector *, ...);\n"; S += "extern struct objc_object *objc_msgSendSuper"; S += "(struct objc_super *, struct objc_selector *, ...);\n"; @@ -291,7 +293,7 @@ void RewriteTest::Initialize(ASTContext &context) { S += "(struct objc_super *, struct objc_selector *, ...);\n"; S += "extern struct objc_object *objc_msgSend_fpret"; S += "(struct objc_object *, struct objc_selector *, ...);\n"; - S += "extern struct objc_object *objc_getClass"; + S += "struct objc_object *objc_getClass"; S += "(const char *);\n"; S += "extern struct objc_object *objc_getMetaClass"; S += "(const char *);\n"; @@ -302,6 +304,8 @@ void RewriteTest::Initialize(ASTContext &context) { S += "extern int objc_exception_match"; S += "(struct objc_class *, struct objc_object *, ...);\n"; S += "extern Protocol *objc_getProtocol(const char *);\n"; + if (LangOpts.Microsoft) + S += "} // end extern \"C\"\n"; S += "#include \n"; S += "#ifndef __FASTENUMERATIONSTATE\n"; S += "struct __objcFastEnumerationState {\n\t"; @@ -1967,6 +1971,7 @@ Stmt *RewriteTest::SynthMessageExpr(ObjCMessageExpr *Exp) { SourceLocation()); MsgExprs.push_back(Unop); } else { + //recExpr->dump(); // Remove all type-casts because it may contain objc-style types; e.g. // Foo *. while (CastExpr *CE = dyn_cast(recExpr))