| // RUN: rm -rf %t | |
| // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing --product-name=Macros -triple arm64-apple-macosx \ | |
| // RUN: -isystem %S -x objective-c-header %s -o %t/output.symbols.json | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix HELLO | |
| #define HELLO 1 | |
| // HELLO-LABEL: "!testLabel": "c:@macro@HELLO" | |
| // HELLO: "accessLevel": "public", | |
| // HELLO-NEXT: "declarationFragments": [ | |
| // HELLO-NEXT: { | |
| // HELLO-NEXT: "kind": "keyword", | |
| // HELLO-NEXT: "spelling": "#define" | |
| // HELLO-NEXT: }, | |
| // HELLO-NEXT: { | |
| // HELLO-NEXT: "kind": "text", | |
| // HELLO-NEXT: "spelling": " " | |
| // HELLO-NEXT: }, | |
| // HELLO-NEXT: { | |
| // HELLO-NEXT: "kind": "identifier", | |
| // HELLO-NEXT: "spelling": "HELLO" | |
| // HELLO-NEXT: } | |
| // HELLO-NEXT: ], | |
| // HELLO: "kind": { | |
| // HELLO-NEXT: "displayName": "Macro", | |
| // HELLO-NEXT: "identifier": "objective-c.macro" | |
| // HELLO-NEXT: }, | |
| // HELLO-NEXT: "location": { | |
| // HELLO-NEXT: "position": { | |
| // HELLO-NEXT: "character": 8, | |
| // HELLO-NEXT: "line": [[# @LINE - 25]] | |
| // HELLO-NEXT: }, | |
| // HELLO-NEXT: "uri": "file://{{.*}}/macros.c" | |
| // HELLO-NEXT: }, | |
| // HELLO-NEXT: "names": { | |
| // HELLO-NEXT: "navigator": [ | |
| // HELLO-NEXT: { | |
| // HELLO-NEXT: "kind": "identifier", | |
| // HELLO-NEXT: "spelling": "HELLO" | |
| // HELLO-NEXT: } | |
| // HELLO-NEXT: ], | |
| // HELLO-NEXT: "subHeading": [ | |
| // HELLO-NEXT: { | |
| // HELLO-NEXT: "kind": "identifier", | |
| // HELLO-NEXT: "spelling": "HELLO" | |
| // HELLO-NEXT: } | |
| // HELLO-NEXT: ], | |
| // HELLO-NEXT: "title": "HELLO" | |
| // HELLO-NEXT: }, | |
| // HELLO-NEXT: "pathComponents": [ | |
| // HELLO-NEXT: "HELLO" | |
| // HELLO-NEXT: ] | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix WORLD | |
| #define WORLD 2 | |
| // WORLD-LABEL: "!testLabel": "c:@macro@WORLD" | |
| // WORLD: "accessLevel": "public", | |
| // WORLD-NEXT: "declarationFragments": [ | |
| // WORLD-NEXT: { | |
| // WORLD-NEXT: "kind": "keyword", | |
| // WORLD-NEXT: "spelling": "#define" | |
| // WORLD-NEXT: }, | |
| // WORLD-NEXT: { | |
| // WORLD-NEXT: "kind": "text", | |
| // WORLD-NEXT: "spelling": " " | |
| // WORLD-NEXT: }, | |
| // WORLD-NEXT: { | |
| // WORLD-NEXT: "kind": "identifier", | |
| // WORLD-NEXT: "spelling": "WORLD" | |
| // WORLD-NEXT: } | |
| // WORLD-NEXT: ], | |
| // WORLD: "kind": { | |
| // WORLD-NEXT: "displayName": "Macro", | |
| // WORLD-NEXT: "identifier": "objective-c.macro" | |
| // WORLD-NEXT: }, | |
| // WORLD-NEXT: "location": { | |
| // WORLD-NEXT: "position": { | |
| // WORLD-NEXT: "character": 8, | |
| // WORLD-NEXT: "line": [[# @LINE - 25]] | |
| // WORLD-NEXT: }, | |
| // WORLD-NEXT: "uri": "file://{{.*}}/macros.c" | |
| // WORLD-NEXT: }, | |
| // WORLD-NEXT: "names": { | |
| // WORLD-NEXT: "navigator": [ | |
| // WORLD-NEXT: { | |
| // WORLD-NEXT: "kind": "identifier", | |
| // WORLD-NEXT: "spelling": "WORLD" | |
| // WORLD-NEXT: } | |
| // WORLD-NEXT: ], | |
| // WORLD-NEXT: "subHeading": [ | |
| // WORLD-NEXT: { | |
| // WORLD-NEXT: "kind": "identifier", | |
| // WORLD-NEXT: "spelling": "WORLD" | |
| // WORLD-NEXT: } | |
| // WORLD-NEXT: ], | |
| // WORLD-NEXT: "title": "WORLD" | |
| // WORLD-NEXT: }, | |
| // WORLD-NEXT: "pathComponents": [ | |
| // WORLD-NEXT: "WORLD" | |
| // WORLD-NEXT: ] | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MACRO_FUN | |
| #define MACRO_FUN(x) x x | |
| // MACRO_FUN-LABEL: "!testLabel": "c:@macro@MACRO_FUN" | |
| // MACRO_FUN-NEXT: "accessLevel": "public", | |
| // MACRO_FUN-NEXT: "declarationFragments": [ | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "keyword", | |
| // MACRO_FUN-NEXT: "spelling": "#define" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "text", | |
| // MACRO_FUN-NEXT: "spelling": " " | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "identifier", | |
| // MACRO_FUN-NEXT: "spelling": "MACRO_FUN" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "text", | |
| // MACRO_FUN-NEXT: "spelling": "(" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "internalParam", | |
| // MACRO_FUN-NEXT: "spelling": "x" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "text", | |
| // MACRO_FUN-NEXT: "spelling": ")" | |
| // MACRO_FUN-NEXT: } | |
| // MACRO_FUN-NEXT: ], | |
| // MACRO_FUN: "kind": { | |
| // MACRO_FUN-NEXT: "displayName": "Macro", | |
| // MACRO_FUN-NEXT: "identifier": "objective-c.macro" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: "location": { | |
| // MACRO_FUN-NEXT: "position": { | |
| // MACRO_FUN-NEXT: "character": 8, | |
| // MACRO_FUN-NEXT: "line": [[# @LINE - 37]] | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: "uri": "file://{{.*}}/macros.c" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: "names": { | |
| // MACRO_FUN-NEXT: "navigator": [ | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "identifier", | |
| // MACRO_FUN-NEXT: "spelling": "MACRO_FUN" | |
| // MACRO_FUN-NEXT: } | |
| // MACRO_FUN-NEXT: ], | |
| // MACRO_FUN-NEXT: "subHeading": [ | |
| // MACRO_FUN-NEXT: { | |
| // MACRO_FUN-NEXT: "kind": "identifier", | |
| // MACRO_FUN-NEXT: "spelling": "MACRO_FUN" | |
| // MACRO_FUN-NEXT: } | |
| // MACRO_FUN-NEXT: ], | |
| // MACRO_FUN-NEXT: "title": "MACRO_FUN" | |
| // MACRO_FUN-NEXT: }, | |
| // MACRO_FUN-NEXT: "pathComponents": [ | |
| // MACRO_FUN-NEXT: "MACRO_FUN" | |
| // MACRO_FUN-NEXT: ] | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUN | |
| #define FUN(x, y, z) x + y + z | |
| // FUN-LABEL: "!testLabel": "c:@macro@FUN" | |
| // FUN-NEXT: "accessLevel": "public", | |
| // FUN-NEXT: "declarationFragments": [ | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "keyword", | |
| // FUN-NEXT: "spelling": "#define" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "text", | |
| // FUN-NEXT: "spelling": " " | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "identifier", | |
| // FUN-NEXT: "spelling": "FUN" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "text", | |
| // FUN-NEXT: "spelling": "(" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "internalParam", | |
| // FUN-NEXT: "spelling": "x" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "text", | |
| // FUN-NEXT: "spelling": ", " | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "internalParam", | |
| // FUN-NEXT: "spelling": "y" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "text", | |
| // FUN-NEXT: "spelling": ", " | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "internalParam", | |
| // FUN-NEXT: "spelling": "z" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "text", | |
| // FUN-NEXT: "spelling": ")" | |
| // FUN-NEXT: } | |
| // FUN-NEXT: ], | |
| // FUN: "kind": { | |
| // FUN-NEXT: "displayName": "Macro", | |
| // FUN-NEXT: "identifier": "objective-c.macro" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: "location": { | |
| // FUN-NEXT: "position": { | |
| // FUN-NEXT: "character": 8, | |
| // FUN-NEXT: "line": [[# @LINE - 53]] | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: "uri": "file://{{.*}}/macros.c" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: "names": { | |
| // FUN-NEXT: "navigator": [ | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "identifier", | |
| // FUN-NEXT: "spelling": "FUN" | |
| // FUN-NEXT: } | |
| // FUN-NEXT: ], | |
| // FUN-NEXT: "subHeading": [ | |
| // FUN-NEXT: { | |
| // FUN-NEXT: "kind": "identifier", | |
| // FUN-NEXT: "spelling": "FUN" | |
| // FUN-NEXT: } | |
| // FUN-NEXT: ], | |
| // FUN-NEXT: "title": "FUN" | |
| // FUN-NEXT: }, | |
| // FUN-NEXT: "pathComponents": [ | |
| // FUN-NEXT: "FUN" | |
| // FUN-NEXT: ] | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNC99 | |
| #define FUNC99(x, ...) | |
| // FUNC99-LABEL: "!testLabel": "c:@macro@FUNC99" | |
| // FUNC99-NEXT: "accessLevel": "public", | |
| // FUNC99-NEXT: "declarationFragments": [ | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "keyword", | |
| // FUNC99-NEXT: "spelling": "#define" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "text", | |
| // FUNC99-NEXT: "spelling": " " | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "identifier", | |
| // FUNC99-NEXT: "spelling": "FUNC99" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "text", | |
| // FUNC99-NEXT: "spelling": "(" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "internalParam", | |
| // FUNC99-NEXT: "spelling": "x" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "text", | |
| // FUNC99-NEXT: "spelling": ", ...)" | |
| // FUNC99-NEXT: } | |
| // FUNC99-NEXT: ], | |
| // FUNC99: "kind": { | |
| // FUNC99-NEXT: "displayName": "Macro", | |
| // FUNC99-NEXT: "identifier": "objective-c.macro" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: "location": { | |
| // FUNC99-NEXT: "position": { | |
| // FUNC99-NEXT: "character": 8, | |
| // FUNC99-NEXT: "line": [[# @LINE - 37]] | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: "uri": "file://{{.*}}/macros.c" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: "names": { | |
| // FUNC99-NEXT: "navigator": [ | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "identifier", | |
| // FUNC99-NEXT: "spelling": "FUNC99" | |
| // FUNC99-NEXT: } | |
| // FUNC99-NEXT: ], | |
| // FUNC99-NEXT: "subHeading": [ | |
| // FUNC99-NEXT: { | |
| // FUNC99-NEXT: "kind": "identifier", | |
| // FUNC99-NEXT: "spelling": "FUNC99" | |
| // FUNC99-NEXT: } | |
| // FUNC99-NEXT: ], | |
| // FUNC99-NEXT: "title": "FUNC99" | |
| // FUNC99-NEXT: }, | |
| // FUNC99-NEXT: "pathComponents": [ | |
| // FUNC99-NEXT: "FUNC99" | |
| // FUNC99-NEXT: ] | |
| // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNGNU | |
| #define FUNGNU(x...) | |
| // FUNGNU-LABEL: "!testLabel": "c:@macro@FUNGNU" | |
| // FUNGNU-NEXT: "accessLevel": "public", | |
| // FUNGNU-NEXT: "declarationFragments": [ | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "keyword", | |
| // FUNGNU-NEXT: "spelling": "#define" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "text", | |
| // FUNGNU-NEXT: "spelling": " " | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "identifier", | |
| // FUNGNU-NEXT: "spelling": "FUNGNU" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "text", | |
| // FUNGNU-NEXT: "spelling": "(" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "internalParam", | |
| // FUNGNU-NEXT: "spelling": "x" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "text", | |
| // FUNGNU-NEXT: "spelling": "...)" | |
| // FUNGNU-NEXT: } | |
| // FUNGNU-NEXT: ], | |
| // FUNGNU: "kind": { | |
| // FUNGNU-NEXT: "displayName": "Macro", | |
| // FUNGNU-NEXT: "identifier": "objective-c.macro" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: "location": { | |
| // FUNGNU-NEXT: "position": { | |
| // FUNGNU-NEXT: "character": 8, | |
| // FUNGNU-NEXT: "line": [[# @LINE - 37]] | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: "uri": "file://{{.*}}/macros.c" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: "names": { | |
| // FUNGNU-NEXT: "navigator": [ | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "identifier", | |
| // FUNGNU-NEXT: "spelling": "FUNGNU" | |
| // FUNGNU-NEXT: } | |
| // FUNGNU-NEXT: ], | |
| // FUNGNU-NEXT: "subHeading": [ | |
| // FUNGNU-NEXT: { | |
| // FUNGNU-NEXT: "kind": "identifier", | |
| // FUNGNU-NEXT: "spelling": "FUNGNU" | |
| // FUNGNU-NEXT: } | |
| // FUNGNU-NEXT: ], | |
| // FUNGNU-NEXT: "title": "FUNGNU" | |
| // FUNGNU-NEXT: }, | |
| // FUNGNU-NEXT: "pathComponents": [ | |
| // FUNGNU-NEXT: "FUNGNU" | |
| // FUNGNU-NEXT: ] | |
| // expected-no-diagnostics | |