llvm-project/clang/test/AST/ast-dump-macro-json.c
Aaron Ballman 27c7a9b157 Add more information to JSON AST dumping of source locations.
This adds information about the offset within the source file to the given source location as well as information about the include file a location is from. These pieces of information allow for more efficient post-processing of JSON AST dumps.

llvm-svn: 374921
2019-10-15 17:30:19 +00:00

197 lines
5.0 KiB
C

// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump=json %s | FileCheck %s
#define FOO frobble
#define BAR FOO
void FOO(void);
void BAR(void);
#define BING(x) x
void BING(quux)(void);
#define BLIP(x, y) x ## y
#define BLAP(x, y) BLIP(x, y)
void BLAP(foo, __COUNTER__)(void);
void BLAP(foo, __COUNTER__)(void);
// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
// using --filters=FunctionDecl
// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "spellingLoc": {
// CHECK-NEXT: "offset": 96,
// CHECK-NEXT: "file": "{{.*}}",
// CHECK-NEXT: "line": 3,
// CHECK-NEXT: "col": 13,
// CHECK-NEXT: "tokLen": 7
// CHECK-NEXT: },
// CHECK-NEXT: "expansionLoc": {
// CHECK-NEXT: "offset": 126,
// CHECK-NEXT: "line": 6,
// CHECK-NEXT: "col": 6,
// CHECK-NEXT: "tokLen": 3
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
// CHECK-NEXT: "offset": 121,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "end": {
// CHECK-NEXT: "offset": 134,
// CHECK-NEXT: "col": 14,
// CHECK-NEXT: "tokLen": 1
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "name": "frobble",
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (void)"
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "spellingLoc": {
// CHECK-NEXT: "offset": 96,
// CHECK-NEXT: "line": 3,
// CHECK-NEXT: "col": 13,
// CHECK-NEXT: "tokLen": 7
// CHECK-NEXT: },
// CHECK-NEXT: "expansionLoc": {
// CHECK-NEXT: "offset": 142,
// CHECK-NEXT: "line": 7,
// CHECK-NEXT: "col": 6,
// CHECK-NEXT: "tokLen": 3
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
// CHECK-NEXT: "offset": 137,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "end": {
// CHECK-NEXT: "offset": 150,
// CHECK-NEXT: "col": 14,
// CHECK-NEXT: "tokLen": 1
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "previousDecl": "0x{{.*}}",
// CHECK-NEXT: "name": "frobble",
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (void)"
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "spellingLoc": {
// CHECK-NEXT: "offset": 183,
// CHECK-NEXT: "line": 11,
// CHECK-NEXT: "col": 11,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "expansionLoc": {
// CHECK-NEXT: "offset": 178,
// CHECK-NEXT: "col": 6,
// CHECK-NEXT: "tokLen": 4,
// CHECK-NEXT: "isMacroArgExpansion": true
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
// CHECK-NEXT: "offset": 173,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "end": {
// CHECK-NEXT: "offset": 193,
// CHECK-NEXT: "col": 21,
// CHECK-NEXT: "tokLen": 1
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "name": "quux",
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (void)"
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "spellingLoc": {
// CHECK-NEXT: "offset": 4,
// CHECK-NEXT: "file": "<scratch space>",
// CHECK-NEXT: "line": 3,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "expansionLoc": {
// CHECK-NEXT: "offset": 259,
// CHECK-NEXT: "file": "{{.*}}",
// CHECK-NEXT: "line": 16,
// CHECK-NEXT: "col": 6,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
// CHECK-NEXT: "offset": 254,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "end": {
// CHECK-NEXT: "offset": 286,
// CHECK-NEXT: "col": 33,
// CHECK-NEXT: "tokLen": 1
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "name": "foo0",
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (void)"
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "spellingLoc": {
// CHECK-NEXT: "offset": 13,
// CHECK-NEXT: "file": "<scratch space>",
// CHECK-NEXT: "line": 5,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "expansionLoc": {
// CHECK-NEXT: "offset": 294,
// CHECK-NEXT: "file": "{{.*}}",
// CHECK-NEXT: "line": 17,
// CHECK-NEXT: "col": 6,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
// CHECK-NEXT: "offset": 289,
// CHECK-NEXT: "col": 1,
// CHECK-NEXT: "tokLen": 4
// CHECK-NEXT: },
// CHECK-NEXT: "end": {
// CHECK-NEXT: "offset": 321,
// CHECK-NEXT: "col": 33,
// CHECK-NEXT: "tokLen": 1
// CHECK-NEXT: }
// CHECK-NEXT: },
// CHECK-NEXT: "name": "foo1",
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (void)"
// CHECK-NEXT: }
// CHECK-NEXT: }