Add IsImplicit field in ObjCMessageExpr that is true when the message
was constructed, e.g. for a property access.

This allows the selector identifier locations machinery for ObjCMessageExpr
to function correctly, in that there are not real locations to handle/report for
such a message.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148013 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaPseudoObject.cpp b/lib/Sema/SemaPseudoObject.cpp
index 08b3fc8..fa56b25 100644
--- a/lib/Sema/SemaPseudoObject.cpp
+++ b/lib/Sema/SemaPseudoObject.cpp
@@ -492,11 +492,9 @@
   assert(Getter);
   
   QualType receiverType;
-  SourceLocation superLoc;
   if (RefExpr->isClassReceiver()) {
     receiverType = S.Context.getObjCInterfaceType(RefExpr->getClassReceiver());
   } else if (RefExpr->isSuperReceiver()) {
-    superLoc = RefExpr->getReceiverLocation();
     receiverType = RefExpr->getSuperReceiverType();
   } else {
     assert(InstanceReceiver);
@@ -507,19 +505,14 @@
   ExprResult msg;
   if (Getter->isInstanceMethod() || RefExpr->isObjectReceiver()) {
     assert(InstanceReceiver || RefExpr->isSuperReceiver());
-    msg = S.BuildInstanceMessage(InstanceReceiver, receiverType, superLoc,
-                                 Getter->getSelector(), Getter,
-                                 GenericLoc, GenericLoc, GenericLoc,
-                                 MultiExprArg());
+    msg = S.BuildInstanceMessageImplicit(InstanceReceiver, receiverType,
+                                         GenericLoc, Getter->getSelector(),
+                                         Getter, MultiExprArg());
   } else {
-    TypeSourceInfo *receiverTypeInfo = 0;
-    if (!RefExpr->isSuperReceiver())
-      receiverTypeInfo = S.Context.getTrivialTypeSourceInfo(receiverType);
-
-    msg = S.BuildClassMessage(receiverTypeInfo, receiverType, superLoc,
-                              Getter->getSelector(), Getter,
-                              GenericLoc, GenericLoc, GenericLoc,
-                              MultiExprArg());
+    msg = S.BuildClassMessageImplicit(receiverType, RefExpr->isSuperReceiver(),
+                                      GenericLoc,
+                                      Getter->getSelector(), Getter,
+                                      MultiExprArg());
   }
   return msg;
 }
@@ -534,11 +527,9 @@
   assert(hasSetter); (void) hasSetter;
 
   QualType receiverType;
-  SourceLocation superLoc;
   if (RefExpr->isClassReceiver()) {
     receiverType = S.Context.getObjCInterfaceType(RefExpr->getClassReceiver());
   } else if (RefExpr->isSuperReceiver()) {
-    superLoc = RefExpr->getReceiverLocation();
     receiverType = RefExpr->getSuperReceiverType();
   } else {
     assert(InstanceReceiver);
@@ -570,19 +561,14 @@
   // Build a message-send.
   ExprResult msg;
   if (Setter->isInstanceMethod() || RefExpr->isObjectReceiver()) {
-    msg = S.BuildInstanceMessage(InstanceReceiver, receiverType, superLoc,
-                                 SetterSelector, Setter,
-                                 GenericLoc, GenericLoc, GenericLoc,
-                                 MultiExprArg(args, 1));
+    msg = S.BuildInstanceMessageImplicit(InstanceReceiver, receiverType,
+                                         GenericLoc, SetterSelector, Setter,
+                                         MultiExprArg(args, 1));
   } else {
-    TypeSourceInfo *receiverTypeInfo = 0;
-    if (!RefExpr->isSuperReceiver())
-      receiverTypeInfo = S.Context.getTrivialTypeSourceInfo(receiverType);
-
-    msg = S.BuildClassMessage(receiverTypeInfo, receiverType, superLoc,
-                              SetterSelector, Setter,
-                              GenericLoc, GenericLoc, GenericLoc,
-                              MultiExprArg(args, 1));
+    msg = S.BuildClassMessageImplicit(receiverType, RefExpr->isSuperReceiver(),
+                                      GenericLoc,
+                                      SetterSelector, Setter,
+                                      MultiExprArg(args, 1));
   }
 
   if (!msg.isInvalid() && captureSetValueAsResult) {