Patch to fix a regression caused by recent rewrite changes.
A potential API bug in ReplaceText pending (A FIXME is added).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44333 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index 23bf240..cc6d569 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -1310,20 +1310,26 @@
   }
   
   int NumIvars = CDecl->getNumInstanceVariables();
-  // If no ivars and no root or if its root, directly or indirectly,
-  // have no ivars (thus not synthesized) then no need to synthesize this class.
-  if (NumIvars <= 0 && (!RCDecl || !ObjcSynthesizedStructs.count(RCDecl)))
-    return;
-  // FIXME: This has potential of causing problem. If 
-  // SynthesizeObjcInternalStruct is ever called recursively.
-  Result += "\nstruct ";
-  Result += CDecl->getName();
-
   SourceLocation LocStart = CDecl->getLocStart();
   SourceLocation LocEnd = CDecl->getLocEnd();
   
   const char *startBuf = SM->getCharacterData(LocStart);
   const char *endBuf = SM->getCharacterData(LocEnd);
+  // If no ivars and no root or if its root, directly or indirectly,
+  // have no ivars (thus not synthesized) then no need to synthesize this class.
+  if (NumIvars <= 0 && (!RCDecl || !ObjcSynthesizedStructs.count(RCDecl))) {
+    //FIXME: This does not replace @interface class-name with the 
+    //Result text. Could be a bug in ReplaceText API.
+    endBuf += Lexer::MeasureTokenLength(LocEnd, *SM);
+    Rewrite.ReplaceText(LocStart, endBuf-startBuf, 
+                        Result.c_str(), Result.size());
+    return;
+  }
+  
+  // FIXME: This has potential of causing problem. If 
+  // SynthesizeObjcInternalStruct is ever called recursively.
+  Result += "\nstruct ";
+  Result += CDecl->getName();
   
   if (NumIvars > 0) {
     const char *cursor = strchr(startBuf, '{');