diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 4b2bdd2..9452983 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -1292,8 +1292,8 @@
     Scope *S,
     IdentifierInfo *receivingClassName, 
     Selector Sel,
-    SourceLocation lbrac,
-    SourceLocation receiverLoc,
+    SourceLocation lbrac, SourceLocation receiverLoc,
+    SourceLocation selectorLoc,
     SourceLocation rbrac, 
     ExprTy **ArgExprs, unsigned NumArgs) {
     return 0;
@@ -1303,7 +1303,7 @@
   // is obtained from NumArgs.
   virtual ExprResult ActOnInstanceMessage(
     ExprTy *receiver, Selector Sel,
-    SourceLocation lbrac, SourceLocation rbrac, 
+    SourceLocation lbrac, SourceLocation selectorLoc, SourceLocation rbrac, 
     ExprTy **ArgExprs, unsigned NumArgs) {
     return 0;
   }
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index 8bb6e11..8f4480a 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -1491,6 +1491,8 @@
   SourceLocation Loc;
   IdentifierInfo *selIdent = ParseObjCSelector(Loc);
 
+  SourceLocation SelectorLoc = Loc;
+    
   llvm::SmallVector<IdentifierInfo *, 12> KeyIdents;
   ExprVector KeyExprs(Actions);
 
@@ -1573,10 +1575,11 @@
   // We've just parsed a keyword message.
   if (ReceiverName)
     return Owned(Actions.ActOnClassMessage(CurScope, ReceiverName, Sel,
-                                           LBracLoc, NameLoc, RBracLoc,
+                                           LBracLoc, NameLoc, SelectorLoc, 
+                                           RBracLoc,
                                            KeyExprs.take(), KeyExprs.size()));
   return Owned(Actions.ActOnInstanceMessage(ReceiverExpr.release(), Sel,
-                                            LBracLoc, RBracLoc,
+                                            LBracLoc, SelectorLoc, RBracLoc,
                                             KeyExprs.take(), KeyExprs.size()));
 }
 
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index f202ad4..68c425c 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -1667,8 +1667,8 @@
   // is obtained from NumArgs.
   virtual ExprResult ActOnClassMessage(
     Scope *S,
-    IdentifierInfo *receivingClassName, Selector Sel,
-    SourceLocation lbrac, SourceLocation receiverLoc, SourceLocation rbrac, 
+    IdentifierInfo *receivingClassName, Selector Sel, SourceLocation lbrac, 
+    SourceLocation receiverLoc, SourceLocation selectorLoc,SourceLocation rbrac, 
     ExprTy **ArgExprs, unsigned NumArgs);
 
   // ActOnInstanceMessage - used for both unary and keyword messages.
@@ -1676,7 +1676,7 @@
   // is obtained from NumArgs.
   virtual ExprResult ActOnInstanceMessage(
     ExprTy *receiver, Selector Sel,
-    SourceLocation lbrac, SourceLocation rbrac, 
+    SourceLocation lbrac, SourceLocation receiverLoc, SourceLocation rbrac, 
     ExprTy **ArgExprs, unsigned NumArgs);
   
   /// ActOnPragmaPack - Called on well formed #pragma pack(...).
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp
index 7629987..6e11050 100644
--- a/lib/Sema/SemaExprObjC.cpp
+++ b/lib/Sema/SemaExprObjC.cpp
@@ -177,7 +177,8 @@
 Sema::ExprResult Sema::ActOnClassMessage(
   Scope *S,
   IdentifierInfo *receiverName, Selector Sel,
-  SourceLocation lbrac, SourceLocation receiverLoc, SourceLocation rbrac, 
+  SourceLocation lbrac, SourceLocation receiverLoc,
+  SourceLocation selectorLoc, SourceLocation rbrac, 
   ExprTy **Args, unsigned NumArgs)
 {
   assert(receiverName && "missing receiver class name");
@@ -202,8 +203,8 @@
         ExprResult ReceiverExpr = new (Context) ObjCSuperExpr(SourceLocation(),
                                                               superTy);
         // We are really in an instance method, redirect.
-        return ActOnInstanceMessage(ReceiverExpr.get(), Sel, lbrac, rbrac,
-                                    Args, NumArgs);
+        return ActOnInstanceMessage(ReceiverExpr.get(), Sel, lbrac, 
+                                    selectorLoc, rbrac, Args, NumArgs);
       }
       // We are sending a message to 'super' within a class method. Do nothing,
       // the receiver will pass through as 'super' (how convenient:-).
@@ -216,8 +217,8 @@
         ExprResult ReceiverExpr = new (Context) DeclRefExpr(VD, VD->getType(), 
                                                             receiverLoc);
         // We are really in an instance method, redirect.
-        return ActOnInstanceMessage(ReceiverExpr.get(), Sel, lbrac, rbrac,
-                                    Args, NumArgs);
+        return ActOnInstanceMessage(ReceiverExpr.get(), Sel, lbrac, 
+                                    selectorLoc, rbrac, Args, NumArgs);
       }
       return Diag(receiverLoc, diag::err_undeclared_var_use) << receiverName;
     }      
@@ -290,6 +291,7 @@
 // is obtained from Sel.getNumArgs().
 Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,
                                             SourceLocation lbrac, 
+                                            SourceLocation receiverLoc,
                                             SourceLocation rbrac,
                                             ExprTy **Args, unsigned NumArgs) {
   assert(receiver && "missing receiver expression");
@@ -310,6 +312,7 @@
         if (ObjCInterfaceDecl *SuperDecl = ClassDecl->getSuperClass())
           Method = SuperDecl->lookupInstanceMethod(Sel);
     }
+
     if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, false,
                                   lbrac, rbrac, returnType))
       return true;
