[cfe-dev] LangOpts && "Unexpected diagnostic outside source file processing" failed.
Alberto Magni
alberto.magni86 at gmail.com
Thu Sep 16 14:27:00 PDT 2010
Hi everybody,
I am new to clang and I am trying to learn it going through this tutorial:
http://www.cs.rpi.edu/~laprej/clang.html
I have a very basic problem though. After some work I ended up to this
piece of code:
int main(int argc, char** argv)
{
FileManager* fileManager = new FileManager();
LangOptions* languageOptions = new LangOptions();
languageOptions->BCPLComment=1;
languageOptions->C99=1;
DiagnosticOptions* diagnosticOptions=new DiagnosticOptions();
llvm::raw_os_ostream os(cout);
TextDiagnosticPrinter* diagnosticClient=new
TextDiagnosticPrinter(os,*diagnosticOptions,true);
Diagnostic* diagnostic = new Diagnostic(diagnosticClient);
SourceManager* sourceManager= new SourceManager(*diagnostic);
HeaderSearch* headerSearch = new HeaderSearch(*fileManager);
TargetOptions targetOptions;
targetOptions.Triple=LLVM_HOSTTRIPLE;
TargetInfo *targetInfo = TargetInfo::CreateTargetInfo (*diagnostic,
targetOptions);
Preprocessor* preprocessor = new Preprocessor(*diagnostic,
*languageOptions, *targetInfo, *sourceManager, *headerSearch);
const FileEntry* fileEntry=fileManager->getFile("test.c");
sourceManager->createMainFileID(fileEntry);
preprocessor->EnterMainSourceFile();
Token token;
do
{
preprocessor->Lex(token);
if(diagnostic->hasErrorOccurred())
{
break;
}
preprocessor->DumpToken(token);
std::cerr << std::endl;
}
while(token.isNot(tok::eof));
diagnosticClient->EndSourceFile();
return 0;
}
This works well with input files with not errors or no warnings.
Then I give as input this very minimalistic file (test.c):
int main() {
/* Nested /* comments */
}
The parsing of this code should produce a warning for the presence of the
nested comment, but instead I get this output:
int 'int'
identifier 'main'
l_paren '('
r_paren ')'
l_brace '{'
clangExample: TextDiagnosticPrinter.cpp:298: void
clang::TextDiagnosticPrinter::EmitCaretDiagnostic(clang::SourceLocation,
clang::CharSourceRange*, unsigned int, const clang::SourceManager&, const
clang::FixItHint*, unsigned int, unsigned int, unsigned int, unsigned int,
unsigned int): Assertion `LangOpts && "Unexpected diagnostic outside source
file processing"' failed.
The problem is that the preprocessor tries to output the diagnostic message
outside the right context. I also tried to call the
diagnosticClient->BeginSourceFile function before the parsing of the file
but no warning is displayed either, the parsing is stopped with no messages
at all.
I also tried the CompilerInstance/CompilerInvocation approach with the same
result.
How can I fix this issue? Where am I wrong ?
Any help is greatly appreciated.
Thank you in advance
Alberto
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100916/b6481d46/attachment.html>
More information about the cfe-dev
mailing list