-
Notifications
You must be signed in to change notification settings - Fork 1
/
diagnostics.cc
41 lines (38 loc) · 1.64 KB
/
diagnostics.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
extern "C" {
#include "clang-c/Index.h"
}
#include "llvm/Support/CommandLine.h"
#include <iostream>
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 diagonsticCount = clang_getNumDiagnostics(translationUnit);
for (unsigned i = 0; i < diagonsticCount; ++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);
std::cout << "Severity: " << severity
<< " File: " << clang_getCString(fName) << " Line: " << line
<< " Col: " << col << " Category: \""
<< clang_getCString(category)
<< "\" Message: " << clang_getCString(message) << std::endl;
clang_disposeString(fName);
clang_disposeString(message);
clang_disposeString(category);
clang_disposeDiagnostic(diagnostic);
}
clang_disposeTranslationUnit(translationUnit);
clang_disposeIndex(index);
return 0;
}