【发布时间】:2016-05-23 10:22:45
【问题描述】:
我正在尝试为 clang 中的代码完成创建虚拟文件。不幸的是,我的应用程序段错误。 我有以下设置:
auto createVirtualFile = [](
clang::CompilerInstance& ci,
std::string name,
llvm::StringRef input
) {
std::unique_ptr<llvm::MemoryBuffer>
MB(llvm::MemoryBuffer::getMemBuffer(input, name));
return std::move(MB);
};
创建文件后,我会设置一个 CodeCompletConsumer:
auto setupCodeComplete = [](
clang::CompilerInstance& ci,
std::string File,
int Line,
int Column
) {
auto& F = ci.getFrontendOpts();
F.CodeCompletionAt.FileName = File;
F.CodeCompletionAt.Line = Line;
F.CodeCompletionAt.Column = Column;
clang::FrontendInputFile FrontFile(File, clang::IK_CXX);
//F.Inputs.push_back(FrontFile);
ci.createCodeCompletionConsumer();
return FrontFile;
};
我通过以下方式调用这两个函数并执行仅语法操作:
auto runCodeCompleteAt = [] (
clang::CompilerInstance& ci,
std::string Filename,
std::string Code,
int Line,
int Column
) {
auto fid = createVirtualFile(ci, Filename, Code);
auto File = setupCodeComplete(ci, Filename, Line, Column);
clang::SyntaxOnlyAction Act;
if (Act.BeginSourceFile(ci, File )) {
Act.Execute(); // segfault
Act.EndSourceFile();
}
};
auto runExample = [](auto& ci){
runCodeCompleterAt(ci, "test.cpp", "std::cou", 1, 7);
}
感谢任何提示。
【问题讨论】:
-
[OT] std::move in
return std::move(MB);应该被移除。 (它只禁止 RVO)。 -
[OT] MB 是一个 unique_ptr,我不应该明确说明移动所有权吗?
标签: c++ autocomplete clang llvm code-completion