diff options
| -rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 29 | ||||
| -rw-r--r-- | clang/test/Index/Inputs/complete-at-EOF.c | 3 | ||||
| -rw-r--r-- | clang/test/Index/complete-at-EOF.c | 5 |
3 files changed, 22 insertions, 15 deletions
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 400cdb469d5..c15a6ab956a 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -384,21 +384,20 @@ bool Preprocessor::SetCodeCompletionPoint(const FileEntry *File, } Position += CompleteColumn - 1; - - // Insert '\0' at the code-completion point. - if (Position < Buffer->getBufferEnd()) { - CodeCompletionFile = File; - CodeCompletionOffset = Position - Buffer->getBufferStart(); - - std::unique_ptr<MemoryBuffer> NewBuffer = - MemoryBuffer::getNewUninitMemBuffer(Buffer->getBufferSize() + 1, - Buffer->getBufferIdentifier()); - char *NewBuf = const_cast<char*>(NewBuffer->getBufferStart()); - char *NewPos = std::copy(Buffer->getBufferStart(), Position, NewBuf); - *NewPos = '\0'; - std::copy(Position, Buffer->getBufferEnd(), NewPos+1); - SourceMgr.overrideFileContents(File, std::move(NewBuffer)); - } + if (Position > Buffer->getBufferEnd()) + Position = Buffer->getBufferEnd(); + + CodeCompletionFile = File; + CodeCompletionOffset = Position - Buffer->getBufferStart(); + + std::unique_ptr<MemoryBuffer> NewBuffer = + MemoryBuffer::getNewUninitMemBuffer(Buffer->getBufferSize() + 1, + Buffer->getBufferIdentifier()); + char *NewBuf = const_cast<char*>(NewBuffer->getBufferStart()); + char *NewPos = std::copy(Buffer->getBufferStart(), Position, NewBuf); + *NewPos = '\0'; + std::copy(Position, Buffer->getBufferEnd(), NewPos+1); + SourceMgr.overrideFileContents(File, std::move(NewBuffer)); return false; } diff --git a/clang/test/Index/Inputs/complete-at-EOF.c b/clang/test/Index/Inputs/complete-at-EOF.c new file mode 100644 index 00000000000..8207f720551 --- /dev/null +++ b/clang/test/Index/Inputs/complete-at-EOF.c @@ -0,0 +1,3 @@ +#define CAKE 1 + +typedef int foo; diff --git a/clang/test/Index/complete-at-EOF.c b/clang/test/Index/complete-at-EOF.c new file mode 100644 index 00000000000..ff39233f0a6 --- /dev/null +++ b/clang/test/Index/complete-at-EOF.c @@ -0,0 +1,5 @@ + +// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test \ +// RUN: -code-completion-at=%S/Inputs/complete-at-EOF.c:4:1 %S/Inputs/complete-at-EOF.c | FileCheck -check-prefix=CHECK-EOF %s +// CHECK-EOF: macro definition:{TypedText CAKE} +// CHECK-EOF: TypedefDecl:{TypedText foo} |

