Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern "C" {
- #include "clang-c/Index.h"
- }
- #include "llvm/Support/CommandLine.h"
- #include "llvm/Support/raw_ostream.h"
- using namespace llvm;
- static cl::opt<std::string> FileName(cl::Positional, cl::desc("Input file"), cl::Required);
- int
- main(int argc, char** argv)
- {
- cl::ParseCommandLineOptions(argc, argv, "Diagnostics Example");
- CXIndex index = clang_createIndex(0, 0);
- const char *args[] = {
- "-I/usr/include",
- "-I."
- };
- CXTranslationUnit translationUnit = clang_parseTranslationUnit(index, FileName.c_str(), args, 2, NULL, 0, CXTranslationUnit_None);
- unsigned int diagnosticCount = clang_getNumDiagnostics(translationUnit);
- for (unsigned int i = 0; i < diagnosticCount; i++)
- {
- CXDiagnostic diagnostic = clang_getDiagnostic(translationUnit, i);
- CXString category = clang_getDiagnosticCategoryText(diagnostic);
- CXString message = clang_getDiagnosticSpelling(diagnostic);
- unsigned severity = clang_getDiagnosticSeverity(diagnostic);
- CXSourceLocation loc = clang_getDiagnosticLocation(diagnostic);
- CXString fName;
- unsigned line = 0, col = 0;
- clang_getPresumedLocation(loc, &fName, &line, &col);
- outs() << "Severity: ";
- switch (severity)
- {
- case CXDiagnostic_Ignored:
- outs() << "Ignored";
- break;
- case CXDiagnostic_Note:
- outs() << "Note";
- break;
- case CXDiagnostic_Warning:
- outs() << "Warning";
- break;
- case CXDiagnostic_Error:
- outs() << "Error";
- break;
- case CXDiagnostic_Fatal:
- outs() << "Fatal";
- break;
- default:
- break;
- }
- outs() << "\n";
- outs() << "In File: " << clang_getCString(fName) << "\n";
- outs() << "Problem in line: " << line << " and column: " << col << "\n";
- outs() << "Problem category: " << clang_getCString(category) << "\n";
- outs() << "Information message: " << clang_getCString(message) << "\n\n";
- clang_disposeString(fName);
- clang_disposeString(message);
- clang_disposeString(category);
- clang_disposeDiagnostic(diagnostic);
- }
- clang_disposeTranslationUnit(translationUnit);
- clang_disposeIndex(index);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement