summaryrefslogtreecommitdiff
path: root/elpa/irony-20220110.849/server/cmake/LibClangDiagnosticsChecker.cpp
blob: 64ea7aadd1dfd136956ba979dbbb2dbb9449069f (plain)
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
42
43
44
45
46
47
/*
  This program takes some forward its command line arguments to libclang and
  returns the number of diagnostics that occured during the parsing.

  It is used during CMake generation to adjust the default parameters to
  libclang.
*/

#include <clang-c/Index.h>

#include <stdio.h>

int main(int argc, const char *argv[]) {
  for (int i = 1; i < argc; ++i) {
    fprintf(stdout, "argv[%d]: %s\n", i, argv[i]);
  }

  CXIndex Idx = clang_createIndex(0, 0);
  CXTranslationUnit TU = clang_parseTranslationUnit(
      Idx, NULL, &argv[1], argc - 1, 0, 0, CXTranslationUnit_None);
  int NumDiagnostics;

  if (TU == NULL) {
    NumDiagnostics = 1;
    fprintf(stderr, "failed to create translation unit!\n");
  } else {
    int i;

    NumDiagnostics = clang_getNumDiagnostics(TU);

    for (i = 0; i < NumDiagnostics; ++i) {
      CXDiagnostic Diag = clang_getDiagnostic(TU, i);
      CXString DiagStr =
          clang_formatDiagnostic(Diag, clang_defaultDiagnosticDisplayOptions());

      fprintf(stderr, "%s\n", clang_getCString(DiagStr));

      clang_disposeString(DiagStr);
      clang_disposeDiagnostic(Diag);
    }

    clang_disposeTranslationUnit(TU);
  }

  clang_disposeIndex(Idx);
  return NumDiagnostics;
}