359 lines · c
1// RUN: rm -rf %t2// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing --product-name=Macros -triple arm64-apple-macosx \3// RUN: -isystem %S -x objective-c-header %s -o %t/output.symbols.json4 5// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix HELLO6#define HELLO 17// HELLO-LABEL: "!testLabel": "c:@macro@HELLO"8// HELLO: "accessLevel": "public",9// HELLO-NEXT: "declarationFragments": [10// HELLO-NEXT: {11// HELLO-NEXT: "kind": "keyword",12// HELLO-NEXT: "spelling": "#define"13// HELLO-NEXT: },14// HELLO-NEXT: {15// HELLO-NEXT: "kind": "text",16// HELLO-NEXT: "spelling": " "17// HELLO-NEXT: },18// HELLO-NEXT: {19// HELLO-NEXT: "kind": "identifier",20// HELLO-NEXT: "spelling": "HELLO"21// HELLO-NEXT: }22// HELLO-NEXT: ],23// HELLO: "kind": {24// HELLO-NEXT: "displayName": "Macro",25// HELLO-NEXT: "identifier": "objective-c.macro"26// HELLO-NEXT: },27// HELLO-NEXT: "location": {28// HELLO-NEXT: "position": {29// HELLO-NEXT: "character": 8,30// HELLO-NEXT: "line": [[# @LINE - 25]]31// HELLO-NEXT: },32// HELLO-NEXT: "uri": "file://{{.*}}/macros.c"33// HELLO-NEXT: },34// HELLO-NEXT: "names": {35// HELLO-NEXT: "navigator": [36// HELLO-NEXT: {37// HELLO-NEXT: "kind": "identifier",38// HELLO-NEXT: "spelling": "HELLO"39// HELLO-NEXT: }40// HELLO-NEXT: ],41// HELLO-NEXT: "subHeading": [42// HELLO-NEXT: {43// HELLO-NEXT: "kind": "identifier",44// HELLO-NEXT: "spelling": "HELLO"45// HELLO-NEXT: }46// HELLO-NEXT: ],47// HELLO-NEXT: "title": "HELLO"48// HELLO-NEXT: },49// HELLO-NEXT: "pathComponents": [50// HELLO-NEXT: "HELLO"51// HELLO-NEXT: ]52 53// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix WORLD54#define WORLD 255// WORLD-LABEL: "!testLabel": "c:@macro@WORLD"56// WORLD: "accessLevel": "public",57// WORLD-NEXT: "declarationFragments": [58// WORLD-NEXT: {59// WORLD-NEXT: "kind": "keyword",60// WORLD-NEXT: "spelling": "#define"61// WORLD-NEXT: },62// WORLD-NEXT: {63// WORLD-NEXT: "kind": "text",64// WORLD-NEXT: "spelling": " "65// WORLD-NEXT: },66// WORLD-NEXT: {67// WORLD-NEXT: "kind": "identifier",68// WORLD-NEXT: "spelling": "WORLD"69// WORLD-NEXT: }70// WORLD-NEXT: ],71// WORLD: "kind": {72// WORLD-NEXT: "displayName": "Macro",73// WORLD-NEXT: "identifier": "objective-c.macro"74// WORLD-NEXT: },75// WORLD-NEXT: "location": {76// WORLD-NEXT: "position": {77// WORLD-NEXT: "character": 8,78// WORLD-NEXT: "line": [[# @LINE - 25]]79// WORLD-NEXT: },80// WORLD-NEXT: "uri": "file://{{.*}}/macros.c"81// WORLD-NEXT: },82// WORLD-NEXT: "names": {83// WORLD-NEXT: "navigator": [84// WORLD-NEXT: {85// WORLD-NEXT: "kind": "identifier",86// WORLD-NEXT: "spelling": "WORLD"87// WORLD-NEXT: }88// WORLD-NEXT: ],89// WORLD-NEXT: "subHeading": [90// WORLD-NEXT: {91// WORLD-NEXT: "kind": "identifier",92// WORLD-NEXT: "spelling": "WORLD"93// WORLD-NEXT: }94// WORLD-NEXT: ],95// WORLD-NEXT: "title": "WORLD"96// WORLD-NEXT: },97// WORLD-NEXT: "pathComponents": [98// WORLD-NEXT: "WORLD"99// WORLD-NEXT: ]100 101// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MACRO_FUN102#define MACRO_FUN(x) x x103// MACRO_FUN-LABEL: "!testLabel": "c:@macro@MACRO_FUN"104// MACRO_FUN-NEXT: "accessLevel": "public",105// MACRO_FUN-NEXT: "declarationFragments": [106// MACRO_FUN-NEXT: {107// MACRO_FUN-NEXT: "kind": "keyword",108// MACRO_FUN-NEXT: "spelling": "#define"109// MACRO_FUN-NEXT: },110// MACRO_FUN-NEXT: {111// MACRO_FUN-NEXT: "kind": "text",112// MACRO_FUN-NEXT: "spelling": " "113// MACRO_FUN-NEXT: },114// MACRO_FUN-NEXT: {115// MACRO_FUN-NEXT: "kind": "identifier",116// MACRO_FUN-NEXT: "spelling": "MACRO_FUN"117// MACRO_FUN-NEXT: },118// MACRO_FUN-NEXT: {119// MACRO_FUN-NEXT: "kind": "text",120// MACRO_FUN-NEXT: "spelling": "("121// MACRO_FUN-NEXT: },122// MACRO_FUN-NEXT: {123// MACRO_FUN-NEXT: "kind": "internalParam",124// MACRO_FUN-NEXT: "spelling": "x"125// MACRO_FUN-NEXT: },126// MACRO_FUN-NEXT: {127// MACRO_FUN-NEXT: "kind": "text",128// MACRO_FUN-NEXT: "spelling": ")"129// MACRO_FUN-NEXT: }130// MACRO_FUN-NEXT: ],131// MACRO_FUN: "kind": {132// MACRO_FUN-NEXT: "displayName": "Macro",133// MACRO_FUN-NEXT: "identifier": "objective-c.macro"134// MACRO_FUN-NEXT: },135// MACRO_FUN-NEXT: "location": {136// MACRO_FUN-NEXT: "position": {137// MACRO_FUN-NEXT: "character": 8,138// MACRO_FUN-NEXT: "line": [[# @LINE - 37]]139// MACRO_FUN-NEXT: },140// MACRO_FUN-NEXT: "uri": "file://{{.*}}/macros.c"141// MACRO_FUN-NEXT: },142// MACRO_FUN-NEXT: "names": {143// MACRO_FUN-NEXT: "navigator": [144// MACRO_FUN-NEXT: {145// MACRO_FUN-NEXT: "kind": "identifier",146// MACRO_FUN-NEXT: "spelling": "MACRO_FUN"147// MACRO_FUN-NEXT: }148// MACRO_FUN-NEXT: ],149// MACRO_FUN-NEXT: "subHeading": [150// MACRO_FUN-NEXT: {151// MACRO_FUN-NEXT: "kind": "identifier",152// MACRO_FUN-NEXT: "spelling": "MACRO_FUN"153// MACRO_FUN-NEXT: }154// MACRO_FUN-NEXT: ],155// MACRO_FUN-NEXT: "title": "MACRO_FUN"156// MACRO_FUN-NEXT: },157// MACRO_FUN-NEXT: "pathComponents": [158// MACRO_FUN-NEXT: "MACRO_FUN"159// MACRO_FUN-NEXT: ]160 161// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUN162#define FUN(x, y, z) x + y + z163// FUN-LABEL: "!testLabel": "c:@macro@FUN"164// FUN-NEXT: "accessLevel": "public",165// FUN-NEXT: "declarationFragments": [166// FUN-NEXT: {167// FUN-NEXT: "kind": "keyword",168// FUN-NEXT: "spelling": "#define"169// FUN-NEXT: },170// FUN-NEXT: {171// FUN-NEXT: "kind": "text",172// FUN-NEXT: "spelling": " "173// FUN-NEXT: },174// FUN-NEXT: {175// FUN-NEXT: "kind": "identifier",176// FUN-NEXT: "spelling": "FUN"177// FUN-NEXT: },178// FUN-NEXT: {179// FUN-NEXT: "kind": "text",180// FUN-NEXT: "spelling": "("181// FUN-NEXT: },182// FUN-NEXT: {183// FUN-NEXT: "kind": "internalParam",184// FUN-NEXT: "spelling": "x"185// FUN-NEXT: },186// FUN-NEXT: {187// FUN-NEXT: "kind": "text",188// FUN-NEXT: "spelling": ", "189// FUN-NEXT: },190// FUN-NEXT: {191// FUN-NEXT: "kind": "internalParam",192// FUN-NEXT: "spelling": "y"193// FUN-NEXT: },194// FUN-NEXT: {195// FUN-NEXT: "kind": "text",196// FUN-NEXT: "spelling": ", "197// FUN-NEXT: },198// FUN-NEXT: {199// FUN-NEXT: "kind": "internalParam",200// FUN-NEXT: "spelling": "z"201// FUN-NEXT: },202// FUN-NEXT: {203// FUN-NEXT: "kind": "text",204// FUN-NEXT: "spelling": ")"205// FUN-NEXT: }206// FUN-NEXT: ],207// FUN: "kind": {208// FUN-NEXT: "displayName": "Macro",209// FUN-NEXT: "identifier": "objective-c.macro"210// FUN-NEXT: },211// FUN-NEXT: "location": {212// FUN-NEXT: "position": {213// FUN-NEXT: "character": 8,214// FUN-NEXT: "line": [[# @LINE - 53]]215// FUN-NEXT: },216// FUN-NEXT: "uri": "file://{{.*}}/macros.c"217// FUN-NEXT: },218// FUN-NEXT: "names": {219// FUN-NEXT: "navigator": [220// FUN-NEXT: {221// FUN-NEXT: "kind": "identifier",222// FUN-NEXT: "spelling": "FUN"223// FUN-NEXT: }224// FUN-NEXT: ],225// FUN-NEXT: "subHeading": [226// FUN-NEXT: {227// FUN-NEXT: "kind": "identifier",228// FUN-NEXT: "spelling": "FUN"229// FUN-NEXT: }230// FUN-NEXT: ],231// FUN-NEXT: "title": "FUN"232// FUN-NEXT: },233// FUN-NEXT: "pathComponents": [234// FUN-NEXT: "FUN"235// FUN-NEXT: ]236 237// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNC99238#define FUNC99(x, ...)239// FUNC99-LABEL: "!testLabel": "c:@macro@FUNC99"240// FUNC99-NEXT: "accessLevel": "public",241// FUNC99-NEXT: "declarationFragments": [242// FUNC99-NEXT: {243// FUNC99-NEXT: "kind": "keyword",244// FUNC99-NEXT: "spelling": "#define"245// FUNC99-NEXT: },246// FUNC99-NEXT: {247// FUNC99-NEXT: "kind": "text",248// FUNC99-NEXT: "spelling": " "249// FUNC99-NEXT: },250// FUNC99-NEXT: {251// FUNC99-NEXT: "kind": "identifier",252// FUNC99-NEXT: "spelling": "FUNC99"253// FUNC99-NEXT: },254// FUNC99-NEXT: {255// FUNC99-NEXT: "kind": "text",256// FUNC99-NEXT: "spelling": "("257// FUNC99-NEXT: },258// FUNC99-NEXT: {259// FUNC99-NEXT: "kind": "internalParam",260// FUNC99-NEXT: "spelling": "x"261// FUNC99-NEXT: },262// FUNC99-NEXT: {263// FUNC99-NEXT: "kind": "text",264// FUNC99-NEXT: "spelling": ", ...)"265// FUNC99-NEXT: }266// FUNC99-NEXT: ],267// FUNC99: "kind": {268// FUNC99-NEXT: "displayName": "Macro",269// FUNC99-NEXT: "identifier": "objective-c.macro"270// FUNC99-NEXT: },271// FUNC99-NEXT: "location": {272// FUNC99-NEXT: "position": {273// FUNC99-NEXT: "character": 8,274// FUNC99-NEXT: "line": [[# @LINE - 37]]275// FUNC99-NEXT: },276// FUNC99-NEXT: "uri": "file://{{.*}}/macros.c"277// FUNC99-NEXT: },278// FUNC99-NEXT: "names": {279// FUNC99-NEXT: "navigator": [280// FUNC99-NEXT: {281// FUNC99-NEXT: "kind": "identifier",282// FUNC99-NEXT: "spelling": "FUNC99"283// FUNC99-NEXT: }284// FUNC99-NEXT: ],285// FUNC99-NEXT: "subHeading": [286// FUNC99-NEXT: {287// FUNC99-NEXT: "kind": "identifier",288// FUNC99-NEXT: "spelling": "FUNC99"289// FUNC99-NEXT: }290// FUNC99-NEXT: ],291// FUNC99-NEXT: "title": "FUNC99"292// FUNC99-NEXT: },293// FUNC99-NEXT: "pathComponents": [294// FUNC99-NEXT: "FUNC99"295// FUNC99-NEXT: ]296 297// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNGNU298#define FUNGNU(x...)299// FUNGNU-LABEL: "!testLabel": "c:@macro@FUNGNU"300// FUNGNU-NEXT: "accessLevel": "public",301// FUNGNU-NEXT: "declarationFragments": [302// FUNGNU-NEXT: {303// FUNGNU-NEXT: "kind": "keyword",304// FUNGNU-NEXT: "spelling": "#define"305// FUNGNU-NEXT: },306// FUNGNU-NEXT: {307// FUNGNU-NEXT: "kind": "text",308// FUNGNU-NEXT: "spelling": " "309// FUNGNU-NEXT: },310// FUNGNU-NEXT: {311// FUNGNU-NEXT: "kind": "identifier",312// FUNGNU-NEXT: "spelling": "FUNGNU"313// FUNGNU-NEXT: },314// FUNGNU-NEXT: {315// FUNGNU-NEXT: "kind": "text",316// FUNGNU-NEXT: "spelling": "("317// FUNGNU-NEXT: },318// FUNGNU-NEXT: {319// FUNGNU-NEXT: "kind": "internalParam",320// FUNGNU-NEXT: "spelling": "x"321// FUNGNU-NEXT: },322// FUNGNU-NEXT: {323// FUNGNU-NEXT: "kind": "text",324// FUNGNU-NEXT: "spelling": "...)"325// FUNGNU-NEXT: }326// FUNGNU-NEXT: ],327// FUNGNU: "kind": {328// FUNGNU-NEXT: "displayName": "Macro",329// FUNGNU-NEXT: "identifier": "objective-c.macro"330// FUNGNU-NEXT: },331// FUNGNU-NEXT: "location": {332// FUNGNU-NEXT: "position": {333// FUNGNU-NEXT: "character": 8,334// FUNGNU-NEXT: "line": [[# @LINE - 37]]335// FUNGNU-NEXT: },336// FUNGNU-NEXT: "uri": "file://{{.*}}/macros.c"337// FUNGNU-NEXT: },338// FUNGNU-NEXT: "names": {339// FUNGNU-NEXT: "navigator": [340// FUNGNU-NEXT: {341// FUNGNU-NEXT: "kind": "identifier",342// FUNGNU-NEXT: "spelling": "FUNGNU"343// FUNGNU-NEXT: }344// FUNGNU-NEXT: ],345// FUNGNU-NEXT: "subHeading": [346// FUNGNU-NEXT: {347// FUNGNU-NEXT: "kind": "identifier",348// FUNGNU-NEXT: "spelling": "FUNGNU"349// FUNGNU-NEXT: }350// FUNGNU-NEXT: ],351// FUNGNU-NEXT: "title": "FUNGNU"352// FUNGNU-NEXT: },353// FUNGNU-NEXT: "pathComponents": [354// FUNGNU-NEXT: "FUNGNU"355// FUNGNU-NEXT: ]356 357// expected-no-diagnostics358 359