diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index 35d91f7..ddb82f4 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -1596,7 +1596,10 @@
   "(%1) in pseudo-destructor expression">;
 def err_pseudo_dtor_call_with_args : Error<
   "call to pseudo-destructor cannot have any arguments">;
-  
+def err_dtor_expr_without_call : Error<
+  "%select{destructor reference|pseudo-destructor expression}0 must be "
+  "called immediately with '()'">;
+
 def err_invalid_use_of_function_type : Error<
   "a function type is not allowed here">;
 def err_invalid_use_of_array_type : Error<"an array type is not allowed here">;
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index c7fde9c..2a47e7b 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -1320,7 +1320,8 @@
                                tok::TokenKind OpKind,
                                SourceLocation ClassNameLoc,
                                IdentifierInfo *ClassName,
-                               const CXXScopeSpec *SS = 0) {
+                               const CXXScopeSpec &SS,
+                               bool HasTrailingLParen) {
     return ExprEmpty();
   }
 
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 8fca14f..da923c4 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -956,7 +956,8 @@
                                                      OpLoc, OpKind,
                                                      Tok.getLocation(), 
                                                      Tok.getIdentifierInfo(),
-                                                     &SS);
+                                                     SS,
+                                               NextToken().is(tok::l_paren));
         ConsumeToken();
       } else if (getLang().CPlusPlus && Tok.is(tok::kw_operator)) {
         // We have a reference to a member operator, e.g., t.operator int or
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index 78e71bc..d088387 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -1998,7 +1998,8 @@
                                tok::TokenKind OpKind,
                                SourceLocation ClassNameLoc,
                                IdentifierInfo *ClassName,
-                               const CXXScopeSpec *SS = 0);
+                               const CXXScopeSpec &SS,
+                               bool HasTrailingLParen);
 
   virtual OwningExprResult
   ActOnOverloadedOperatorReferenceExpr(Scope *S, ExprArg Base,
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 4d49f87..99d8094 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -1817,16 +1817,17 @@
                                    tok::TokenKind OpKind,
                                    SourceLocation ClassNameLoc,
                                    IdentifierInfo *ClassName,
-                                   const CXXScopeSpec *SS) {
-  if (SS && SS->isInvalid())
+                                   const CXXScopeSpec &SS,
+                                   bool HasTrailingLParen) {
+  if (SS.isInvalid())
     return ExprError();
 
   QualType BaseType;
-  if (SS && isUnknownSpecialization(*SS))
-    BaseType = Context.getTypenameType((NestedNameSpecifier *)SS->getScopeRep(),
+  if (isUnknownSpecialization(SS))
+    BaseType = Context.getTypenameType((NestedNameSpecifier *)SS.getScopeRep(),
                                        ClassName);
   else {
-    TypeTy *BaseTy = getTypeName(*ClassName, ClassNameLoc, S, SS);
+    TypeTy *BaseTy = getTypeName(*ClassName, ClassNameLoc, S, &SS);
     if (!BaseTy) {
       Diag(ClassNameLoc, diag::err_ident_in_pseudo_dtor_not_a_type) 
         << ClassName;
@@ -1840,8 +1841,23 @@
   DeclarationName DtorName = 
     Context.DeclarationNames.getCXXDestructorName(CanBaseType);
 
-  return BuildMemberReferenceExpr(S, move(Base), OpLoc, OpKind, ClassNameLoc,
-                                  DtorName, DeclPtrTy(), SS);
+  OwningExprResult Result
+    = BuildMemberReferenceExpr(S, move(Base), OpLoc, OpKind, ClassNameLoc,
+                               DtorName, DeclPtrTy(), &SS);
+  if (Result.isInvalid() || HasTrailingLParen)
+    return move(Result);
+  
+  // The only way a reference to a destructor can be used is to 
+  // immediately call them. Since the next token is not a '(', produce a
+  // diagnostic and build the call now.
+  Expr *E = (Expr *)Result.get();
+  SourceLocation ExpectedLParenLoc = PP.getLocForEndOfToken(E->getLocEnd());
+  Diag(E->getLocStart(), diag::err_dtor_expr_without_call)
+    << isa<CXXPseudoDestructorExpr>(E)
+    << CodeModificationHint::CreateInsertion(ExpectedLParenLoc, "()");
+  
+  return ActOnCallExpr(0, move(Result), ExpectedLParenLoc, 
+                       MultiExprArg(*this, 0, 0), 0, ExpectedLParenLoc);
 }
 
 Sema::OwningExprResult
diff --git a/test/SemaCXX/pseudo-destructors.cpp b/test/SemaCXX/pseudo-destructors.cpp
index f1fa331..1f05e81 100644
--- a/test/SemaCXX/pseudo-destructors.cpp
+++ b/test/SemaCXX/pseudo-destructors.cpp
@@ -32,3 +32,9 @@
   
   f->::~Bar(17, 42); // expected-error{{cannot have any arguments}}
 }
+
+typedef int Integer;
+
+void destroy_without_call(int *ip) {
+  ip->~Integer; // expected-error{{called immediately}}
+}
\ No newline at end of file
