// 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