From 90d9081cacb4b0163f2c7527f666d6515257067c Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 26 Oct 2010 23:21:25 +0000 Subject: [PATCH] Add support for code completion on stdin. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117414 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Frontend/CommandLineSourceLoc.h | 8 +++++++- lib/Frontend/CompilerInstance.cpp | 5 ++++- test/CodeCompletion/stdin.c | 7 +++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 test/CodeCompletion/stdin.c diff --git a/include/clang/Frontend/CommandLineSourceLoc.h b/include/clang/Frontend/CommandLineSourceLoc.h index bea468b017..8911cfadd5 100644 --- a/include/clang/Frontend/CommandLineSourceLoc.h +++ b/include/clang/Frontend/CommandLineSourceLoc.h @@ -37,9 +37,15 @@ public: // If both tail splits were valid integers, return success. if (!ColSplit.second.getAsInteger(10, PSL.Column) && - !LineSplit.second.getAsInteger(10, PSL.Line)) + !LineSplit.second.getAsInteger(10, PSL.Line)) { PSL.FileName = LineSplit.first; + // On the command-line, stdin may be specified via "-". Inside the + // compiler, stdin is called "". + if (PSL.FileName == "-") + PSL.FileName = ""; + } + return PSL; } }; diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index a187140ca0..95d417f633 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -479,7 +479,10 @@ bool CompilerInstance::InitializeSourceManager(llvm::StringRef InputFile, Diags.Report(diag::err_fe_error_reading_stdin); return false; } - SourceMgr.createMainFileIDForMemBuffer(SB); + const FileEntry *File = FileMgr.getVirtualFile(SB->getBufferIdentifier(), + SB->getBufferSize(), 0); + SourceMgr.createMainFileID(File); + SourceMgr.overrideFileContents(File, SB); } assert(!SourceMgr.getMainFileID().isInvalid() && diff --git a/test/CodeCompletion/stdin.c b/test/CodeCompletion/stdin.c new file mode 100644 index 0000000000..46495b2cd3 --- /dev/null +++ b/test/CodeCompletion/stdin.c @@ -0,0 +1,7 @@ +enum X { x }; +enum Y { y }; + +enum + // RUN: %clang_cc1 -fsyntax-only -code-completion-at=-:4:6 < %s -o - | FileCheck -check-prefix=CC1 %s + // CHECK-CC1: X + // CHECK-CC1: Y -- 2.40.0