From c2519b23238088aa438008506d9ac121b12b5720 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 8 Apr 2014 18:57:44 +0000 Subject: Merging r200953: ------------------------------------------------------------------------ r200953 | rtrieu | 2014-02-06 18:26:23 -0500 (Thu, 06 Feb 2014) | 3 lines Fixes PR18762, stop the StmtPrinter for ObjCPropertyRefExpr from crashing on certain receiver types. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_34@205785 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/StmtPrinter.cpp | 4 +++- test/Misc/ast-dump-decl.m | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 0ecb5b52c2..ae2cdf7574 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -709,9 +709,11 @@ void StmtPrinter::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { void StmtPrinter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) { if (Node->isSuperReceiver()) OS << "super."; - else if (Node->getBase()) { + else if (Node->isObjectReceiver() && Node->getBase()) { PrintExpr(Node->getBase()); OS << "."; + } else if (Node->isClassReceiver() && Node->getClassReceiver()) { + OS << Node->getClassReceiver()->getName() << "."; } if (Node->isImplicitProperty()) diff --git a/test/Misc/ast-dump-decl.m b/test/Misc/ast-dump-decl.m index f8a5e5a263..539923b2e3 100644 --- a/test/Misc/ast-dump-decl.m +++ b/test/Misc/ast-dump-decl.m @@ -134,3 +134,12 @@ void TestBlockDecl(int x) { // CHECK-NEXT: ... // CHECK-NEXT: capture ParmVar{{.*}} 'x' 'int' // CHECK-NEXT: CompoundStmt + +@interface B ++ (int) foo; +@end + +void f() { + __typeof__(B.foo) Test; +} +// CHECK: VarDecl{{.*}}Test 'typeof (B.foo)':'int' -- cgit v1.2.3