Index: test/SemaCXX/MicrosoftExtensions.cpp
===================================================================
--- test/SemaCXX/MicrosoftExtensions.cpp	(revision 179591)
+++ test/SemaCXX/MicrosoftExtensions.cpp	(working copy)
@@ -302,13 +302,14 @@
   T GetV() { return 0; }
   void SetV(T v) {}
   void f() { V = this->V; V < this->V; }
-  //void g() { V++; }
-  //void h() { V*=2; }
+  void g() { V++; }
+  void h() { V*=2; }
 };
 struct SP10 {
   SP10(int v) {}
   bool operator<(const SP10& v) { return true; }
   SP10 operator*(int v) { return *this; }
+  SP10 operator+(int v) { return *this; }
   SP10& operator=(const SP10& v) { return *this; }
 };
 void TestSP9() {
@@ -329,6 +330,6 @@
 
   SP9<SP10> c3;
   c3.f(); // Overloaded binary op operand
-  //c3.g(); // Overloaded incdec op operand
-  //c3.h(); // Overloaded unary op operand
+  c3.g(); // Overloaded incdec op operand
+  c3.h(); // Overloaded unary op operand
 }
Index: lib/Sema/SemaPseudoObject.cpp
===================================================================
--- lib/Sema/SemaPseudoObject.cpp	(revision 179591)
+++ lib/Sema/SemaPseudoObject.cpp	(working copy)
@@ -312,6 +312,9 @@
    Expr *rebuildAndCaptureObject(Expr *);
    ExprResult buildGet();
    ExprResult buildSet(Expr *op, SourceLocation, bool);
+   ExprResult buildIncDecOperation(Scope *Sc, SourceLocation opLoc,
+                                   UnaryOperatorKind opcode,
+                                   Expr *op);
  };
 }
 
@@ -1423,6 +1426,21 @@
                          op->getSourceRange().getEnd());
 }
 
+ExprResult
+MSPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opLoc,
+                                          UnaryOperatorKind opcode,
+                                          Expr *op) {
+  ExprResult result = buildGet();
+  if (result.isInvalid()) return ExprError();
+
+  QualType resultType = result.get()->getType();
+  if (resultType->isDependentType())
+    return new (S.Context) UnaryOperator(op, opcode, S.Context.DependentTy,
+                                         VK_RValue, OK_Ordinary, opLoc);
+
+  return PseudoOpBuilder::buildIncDecOperation(Sc, opLoc, opcode, op);
+}
+
 //===----------------------------------------------------------------------===//
 //  General Sema routines.
 //===----------------------------------------------------------------------===//
