diff --git a/lib/Tooling/Refactor/ExtractRepeatedExpressionIntoVariable.cpp b/lib/Tooling/Refactor/ExtractRepeatedExpressionIntoVariable.cpp
index 7e796b6..fcdb9e6 100644
--- a/lib/Tooling/Refactor/ExtractRepeatedExpressionIntoVariable.cpp
+++ b/lib/Tooling/Refactor/ExtractRepeatedExpressionIntoVariable.cpp
@@ -244,7 +244,8 @@
 ExtractRepeatedExpressionIntoVariableOperation::perform(
     ASTContext &Context, const Preprocessor &ThePreprocessor,
     const RefactoringOptionSet &Options, unsigned SelectedCandidateIndex) {
-  std::vector<RefactoringReplacement> Replacements;
+  RefactoringResult Result(std::vector<RefactoringReplacement>{});
+  std::vector<RefactoringReplacement> &Replacements = Result.Replacements;
 
   const SourceManager &SM = Context.getSourceManager();
   SourceLocation InsertionLoc =
@@ -255,6 +256,10 @@
         "no appropriate insertion location found");
 
   StringRef Name = nameForExtractedVariable(E);
+  Result.AssociatedSymbols.push_back(
+      llvm::make_unique<RefactoringResultAssociatedSymbol>(SymbolName(Name)));
+  RefactoringResultAssociatedSymbol *CreatedSymbol =
+      Result.AssociatedSymbols.back().get();
 
   // Create the variable that will hold the value of the duplicate expression.
   std::string VariableDeclarationString;
@@ -265,21 +270,29 @@
   PP.SuppressLifetimeQualifiers = true;
   PP.SuppressUnwrittenScope = true;
   T.print(OS, PP, /*PlaceHolder*/ Name);
+  // FIXME: We should hook into the TypePrinter when moving over to llvm.org
+  // instead and get the offset from it.
+  unsigned NameOffset = StringRef(OS.str()).find(Name);
   OS << " = ";
   PrintingPolicy ExprPP = Context.getPrintingPolicy();
   ExprPP.SuppressStrongLifetime = true;
   ExprPP.SuppressImplicitBase = true;
   E->printPretty(OS, /*Helper=*/nullptr, ExprPP);
   OS << ";\n";
-  Replacements.emplace_back(SourceRange(InsertionLoc, InsertionLoc), OS.str());
+  Replacements.push_back(RefactoringReplacement(
+      SourceRange(InsertionLoc, InsertionLoc), OS.str(), CreatedSymbol,
+      RefactoringReplacement::AssociatedSymbolLocation(
+          llvm::makeArrayRef(NameOffset), /*IsDeclaration=*/true)));
 
   // Replace the duplicates with a reference to the variable.
-  for (const Expr *E : DuplicateExpressions)
-    Replacements.emplace_back(
+  for (const Expr *E : DuplicateExpressions) {
+    Replacements.push_back(RefactoringReplacement(
         SourceRange(SM.getSpellingLoc(E->getLocStart()),
                     getPreciseTokenLocEnd(SM.getSpellingLoc(E->getLocEnd()), SM,
                                           Context.getLangOpts())),
-        Name);
+        Name, CreatedSymbol,
+        /*NameOffset=*/llvm::makeArrayRef(unsigned(0))));
+  }
 
-  return std::move(Replacements);
+  return std::move(Result);
 }
diff --git a/test/Refactor/ExtractRepeatedExpression/extract-repeated-expr-perform.cpp b/test/Refactor/ExtractRepeatedExpression/extract-repeated-expr-perform.cpp
index f5ddc8a..09cfc7b 100644
--- a/test/Refactor/ExtractRepeatedExpression/extract-repeated-expr-perform.cpp
+++ b/test/Refactor/ExtractRepeatedExpression/extract-repeated-expr-perform.cpp
@@ -45,12 +45,12 @@
     ref.object(x).constMethod();
   ref.object(x).method();
 }
-// CHECK3: "AClass &object = ref.object(x);\n" [[@LINE-4]]:3 -> [[@LINE-4]]:3
-// CHECK3-NEXT: "object" [[@LINE-4]]:5 -> [[@LINE-4]]:18
-// CHECK3-NEXT: "object" [[@LINE-4]]:3 -> [[@LINE-4]]:16
+// CHECK3: "AClass &object = ref.object(x);\n" [[@LINE-4]]:3 -> [[@LINE-4]]:3 [Symbol extracted-decl 0 1:9 -> 1:15]
+// CHECK3-NEXT: "object" [[@LINE-4]]:5 -> [[@LINE-4]]:18 [Symbol extracted-decl-ref 0 1:1 -> 1:7]
+// CHECK3-NEXT: "object" [[@LINE-4]]:3 -> [[@LINE-4]]:16 [Symbol extracted-decl-ref 0 1:1 -> 1:7]
 
-// RUN: clang-refactor-test perform -action extract-repeated-expr-into-var -at=%s:45:5 %s | FileCheck --check-prefix=CHECK3 %s
-// RUN: clang-refactor-test perform -action extract-repeated-expr-into-var -at=%s:46:3 %s | FileCheck --check-prefix=CHECK3 %s
+// RUN: clang-refactor-test perform -action extract-repeated-expr-into-var -at=%s:45:5 -emit-associated %s | FileCheck --check-prefix=CHECK3 %s
+// RUN: clang-refactor-test perform -action extract-repeated-expr-into-var -at=%s:46:3 -emit-associated %s | FileCheck --check-prefix=CHECK3 %s
 
 void takesClass4(AWrapper &ref) {
   int x = 0;
