[cfe-dev] Ping - CompilerInstance problem
Robert Ankeney
rrankene at gmail.com
Tue Mar 10 10:54:08 PDT 2015
ping - Any ideas? Searching around I found a similar problem (I think on
stackoverflow), but no responses...
I'm updating a project from Clang 3.4 to the latest version of Clang, and
am having problems getting it to work. It's a project with a
RecursiveASTVisitor, running on Windows with MinGW-32. Everything seems to
go well until I get to the destructor of the CompilerInstance. The code
looks something like:
{
CompilerInstance compiler;
DiagnosticOptions &diagOpts = compiler.getDiagnosticOpts();
string verr_string;
raw_string_ostream vErr(verr_string);
TextDiagnosticPrinter *pTextDiagnosticPrinter =
new TextDiagnosticPrinter(vErr, &diagOpts);
compiler.createDiagnostics(pTextDiagnosticPrinter);
// Create an invocation that passes any flags to preprocessor
unique_ptr<CompilerInvocation> Invocation(new CompilerInvocation);
CompilerInvocation::CreateFromArgs(*Invocation, argv + 1, argv + argc,
compiler.getDiagnostics());
Invocation->setLangDefaults(compiler.getLangOpts(),
clang::IK_CXX,
options.langStandard);
compiler.setInvocation(Invocation.release());
// Set default target triple
shared_ptr<TargetOptions> pto( new TargetOptions());
pto->Triple = llvm::sys::getDefaultTargetTriple();
shared_ptr<TargetInfo>
pti(TargetInfo::CreateTargetInfo(compiler.getDiagnostics(), pto));
compiler.setTarget(pti.get());
compiler.createFileManager();
compiler.createSourceManager(compiler.getFileManager());
compiler.createPreprocessor(TU_Module);
compiler.getPreprocessorOpts().UsePredefines = false;
compiler.createASTContext();
SourceManager &sourceMgr = compiler.getSourceManager();
// Initialize rewriter
Rewriter Rewrite;
Rewrite.setSourceMgr(sourceMgr, compiler.getLangOpts());
// Get filename
string fileName(argv[argc - 1]);
const FileEntry *pFile = compiler.getFileManager().getFile(fileName);
sourceMgr.setMainFileID(sourceMgr.createFileID(pFile, SourceLocation(),
SrcMgr::C_User));
if (pFile == NULL)
{
// File not found
return false;
}
compiler.getDiagnosticClient().BeginSourceFile(compiler.getLangOpts(),
&compiler.getPreprocessor());
MyASTConsumer astConsumer(Rewrite);
try {
// Parse the AST
ParseAST(compiler.getPreprocessor(),
&astConsumer,
compiler.getASTContext());
} catch(exception &e)
{
return false;
}
compiler.getDiagnosticClient().EndSourceFile();
return true; // Return success
}
Everything works fine till the return, when it crashes with:
libstdc++-6!_ZNSs4_Rep10_M_destroyERKSaIcE
C:\Qt\Qt5.4.1\5.4\mingw491_32\bin\libstdc++-6.dll
clang::DiagnosticsEngine::~DiagnosticsEngine
clang::CompilerInstance::~CompilerInstance
Any ideas what I did wrong? Something with using the TextDiagnosticPrinter?
This is with:
clang version 3.7.0 (trunk 230884)
Target: i686-pc-windows-gnu
Thread model: posix
Thanks!
Robert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150310/bfe3dfb9/attachment.html>
More information about the cfe-dev
mailing list