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, '{');