Index: lib/Sema/SemaOverload.cpp
===================================================================
--- lib/Sema/SemaOverload.cpp	(revision 148604)
+++ lib/Sema/SemaOverload.cpp	(working copy)
@@ -10556,7 +10556,8 @@
   case OR_No_Viable_Function:
     if (CandidateSet.empty())
       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
-        << Base->getType() << Base->getSourceRange();
+        << Base->getType() << Base->getSourceRange()
+        << FixItHint::CreateReplacement(OpLoc, ".");
     else
       Diag(OpLoc, diag::err_ovl_no_viable_oper)
         << "operator->" << Base->getSourceRange();
Index: test/FixIt/fixit-member-reference.cpp
===================================================================
--- test/FixIt/fixit-member-reference.cpp	(revision 0)
+++ test/FixIt/fixit-member-reference.cpp	(working copy)
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: cp %s %t
+// RUN: not %clang_cc1 -fsyntax-only -fixit -x c++ %t
+// RUN: %clang_cc1 -fsyntax-only -pedantic -x c++ %t
+
+struct S {
+  int member;
+};
+
+void foo() {
+  struct S s;
+  struct S *ps;
+
+  s->member = 12; // expected-error{{member reference type 'struct S' is not a pointer}}
+  ps.member = 12; // expected-error{{member reference type 'struct S *' is a pointer; maybe you meant to use '->'?}}
+}
