Add a new expression class, ObjCSuperExpr, to handle the Objective-C 'super'. Remove ObjCThis from PredefinedExpr

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58698 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index fa70f47..3d8d192 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -130,7 +130,9 @@
     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
   case Expr::ObjCPropertyRefExprClass:
     return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E));
-    
+  case Expr::ObjCSuperExprClass:
+    return EmitObjCSuperExpr(cast<ObjCSuperExpr>(E));
+
   case Expr::UnaryOperatorClass: 
     return EmitUnaryOpLValue(cast<UnaryOperator>(E));
   case Expr::ArraySubscriptExprClass:
@@ -571,8 +573,6 @@
   case PredefinedExpr::Function:
   case PredefinedExpr::PrettyFunction:
     return EmitPredefinedFunctionName(E->getIdentType());
-  case PredefinedExpr::ObjCSuper:
-    return EmitUnsupportedLValue(E, "use of super");
   }
 }
 
@@ -875,6 +875,11 @@
   return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers());
 }
 
+LValue
+CodeGenFunction::EmitObjCSuperExpr(const ObjCSuperExpr *E) {
+  return EmitUnsupportedLValue(E, "use of super");
+}
+
 RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType, 
                                      CallExpr::const_arg_iterator ArgBeg,
                                      CallExpr::const_arg_iterator ArgEnd) {
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index c0260ad..cb82040 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -72,9 +72,7 @@
     }
     
     isClassMessage = true;
-  } else if (isa<PredefinedExpr>(E->getReceiver())) {
-    assert(cast<PredefinedExpr>(E->getReceiver())->getIdentType() == 
-             PredefinedExpr::ObjCSuper);
+  } else if (isa<ObjCSuperExpr>(E->getReceiver())) {
     isSuperMessage = true;
     Receiver = LoadObjCSelf();
   } else {
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index ccc5008..e6636ba 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -402,6 +402,7 @@
   LValue EmitObjCMessageExprLValue(const ObjCMessageExpr *E);
   LValue EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E);
   LValue EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E);
+  LValue EmitObjCSuperExpr(const ObjCSuperExpr *E);
 
   //===--------------------------------------------------------------------===//
   //                         Scalar Expression Emission