// RUN: rm -rf %t
// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
// RUN: -fblocks -triple arm64-apple-macosx -x objective-c-header %s -o %t/output.symbols.json -verify
@interface Foo
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix NOPARAM
-(void)methodBlockNoParam:(void (^)())block;
// NOPARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockNoParam:"
// NOPARAM: "declarationFragments": [
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": "- ("
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "typeIdentifier",
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
// NOPARAM-NEXT: "spelling": "void"
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": ") "
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "identifier",
// NOPARAM-NEXT: "spelling": "methodBlockNoParam:"
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": "("
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "typeIdentifier",
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
// NOPARAM-NEXT: "spelling": "void"
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": " (^)()) "
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "internalParam",
// NOPARAM-NEXT: "spelling": "block"
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": ";"
// NOPARAM-NEXT: }
// NOPARAM-NEXT: ],
// NOPARAM: "functionSignature": {
// NOPARAM-NEXT: "parameters": [
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "declarationFragments": [
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": "("
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "typeIdentifier",
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
// NOPARAM-NEXT: "spelling": "void"
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "text",
// NOPARAM-NEXT: "spelling": " (^)()) "
// NOPARAM-NEXT: },
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "internalParam",
// NOPARAM-NEXT: "spelling": "block"
// NOPARAM-NEXT: }
// NOPARAM-NEXT: ],
// NOPARAM-NEXT: "name": "block"
// NOPARAM-NEXT: }
// NOPARAM-NEXT: ],
// NOPARAM-NEXT: "returns": [
// NOPARAM-NEXT: {
// NOPARAM-NEXT: "kind": "typeIdentifier",
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
// NOPARAM-NEXT: "spelling": "void"
// NOPARAM-NEXT: }
// NOPARAM-NEXT: ]
// NOPARAM-NEXT: }
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PARAM
-(void)methodBlockWithParam:(int (^)(int foo))block;
// PARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockWithParam:"
// PARAM: "declarationFragments": [
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": "- ("
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "typeIdentifier",
// PARAM-NEXT: "preciseIdentifier": "c:v",
// PARAM-NEXT: "spelling": "void"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": ") "
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "identifier",
// PARAM-NEXT: "spelling": "methodBlockWithParam:"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": "("
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "typeIdentifier",
// PARAM-NEXT: "preciseIdentifier": "c:I",
// PARAM-NEXT: "spelling": "int"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": " (^)("
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "typeIdentifier",
// PARAM-NEXT: "preciseIdentifier": "c:I",
// PARAM-NEXT: "spelling": "int"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": " "
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "internalParam",
// PARAM-NEXT: "spelling": "foo"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": ")) "
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "internalParam",
// PARAM-NEXT: "spelling": "block"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": ";"
// PARAM-NEXT: }
// PARAM-NEXT: ],
// PARAM: "functionSignature": {
// PARAM-NEXT: "parameters": [
// PARAM-NEXT: {
// PARAM-NEXT: "declarationFragments": [
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": "("
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "typeIdentifier",
// PARAM-NEXT: "preciseIdentifier": "c:I",
// PARAM-NEXT: "spelling": "int"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": " (^)("
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "typeIdentifier",
// PARAM-NEXT: "preciseIdentifier": "c:I",
// PARAM-NEXT: "spelling": "int"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": " "
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "internalParam",
// PARAM-NEXT: "spelling": "foo"
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "text",
// PARAM-NEXT: "spelling": ")) "
// PARAM-NEXT: },
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "internalParam",
// PARAM-NEXT: "spelling": "block"
// PARAM-NEXT: }
// PARAM-NEXT: ],
// PARAM-NEXT: "name": "block"
// PARAM-NEXT: }
// PARAM-NEXT: ],
// PARAM-NEXT: "returns": [
// PARAM-NEXT: {
// PARAM-NEXT: "kind": "typeIdentifier",
// PARAM-NEXT: "preciseIdentifier": "c:v",
// PARAM-NEXT: "spelling": "void"
// PARAM-NEXT: }
// PARAM-NEXT: ]
// PARAM-NEXT: }
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MULTIPARAM
-(void)methodBlockWithMultipleParam:(int (^)(int foo, unsigned baz))block;
// MULTIPARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:"
// MULTIPARAM: "declarationFragments": [
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": "- ("
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:v",
// MULTIPARAM-NEXT: "spelling": "void"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": ") "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "identifier",
// MULTIPARAM-NEXT: "spelling": "methodBlockWithMultipleParam:"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": "("
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
// MULTIPARAM-NEXT: "spelling": "int"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": " (^)("
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
// MULTIPARAM-NEXT: "spelling": "int"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": " "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "internalParam",
// MULTIPARAM-NEXT: "spelling": "foo"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": ", "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:i",
// MULTIPARAM-NEXT: "spelling": "unsigned int"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": " "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "internalParam",
// MULTIPARAM-NEXT: "spelling": "baz"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": ")) "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "internalParam",
// MULTIPARAM-NEXT: "spelling": "block"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": ";"
// MULTIPARAM-NEXT: }
// MULTIPARAM-NEXT: ],
// MULTIPARAM: "functionSignature": {
// MULTIPARAM-NEXT: "parameters": [
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "declarationFragments": [
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": "("
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
// MULTIPARAM-NEXT: "spelling": "int"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": " (^)("
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
// MULTIPARAM-NEXT: "spelling": "int"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": " "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "internalParam",
// MULTIPARAM-NEXT: "spelling": "foo"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": ", "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:i",
// MULTIPARAM-NEXT: "spelling": "unsigned int"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": " "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "internalParam",
// MULTIPARAM-NEXT: "spelling": "baz"
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "text",
// MULTIPARAM-NEXT: "spelling": ")) "
// MULTIPARAM-NEXT: },
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "internalParam",
// MULTIPARAM-NEXT: "spelling": "block"
// MULTIPARAM-NEXT: }
// MULTIPARAM-NEXT: ],
// MULTIPARAM-NEXT: "name": "block"
// MULTIPARAM-NEXT: }
// MULTIPARAM-NEXT: ],
// MULTIPARAM-NEXT: "returns": [
// MULTIPARAM-NEXT: {
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
// MULTIPARAM-NEXT: "preciseIdentifier": "c:v",
// MULTIPARAM-NEXT: "spelling": "void"
// MULTIPARAM-NEXT: }
// MULTIPARAM-NEXT: ]
// MULTIPARAM-NEXT: },
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix VARIADIC
-(void)methodBlockVariadic:(int (^)(int foo, ...))block;
// VARIADIC-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockVariadic:"
// VARIADIC: "declarationFragments": [
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": "- ("
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "typeIdentifier",
// VARIADIC-NEXT: "preciseIdentifier": "c:v",
// VARIADIC-NEXT: "spelling": "void"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": ") "
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "identifier",
// VARIADIC-NEXT: "spelling": "methodBlockVariadic:"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": "("
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "typeIdentifier",
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
// VARIADIC-NEXT: "spelling": "int"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": " (^)("
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "typeIdentifier",
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
// VARIADIC-NEXT: "spelling": "int"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": " "
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "internalParam",
// VARIADIC-NEXT: "spelling": "foo"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": ", ...)) "
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "internalParam",
// VARIADIC-NEXT: "spelling": "block"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": ";"
// VARIADIC-NEXT: }
// VARIADIC-NEXT: ],
// VARIADIC: "functionSignature": {
// VARIADIC-NEXT: "parameters": [
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "declarationFragments": [
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": "("
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "typeIdentifier",
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
// VARIADIC-NEXT: "spelling": "int"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": " (^)("
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "typeIdentifier",
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
// VARIADIC-NEXT: "spelling": "int"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": " "
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "internalParam",
// VARIADIC-NEXT: "spelling": "foo"
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "text",
// VARIADIC-NEXT: "spelling": ", ...)) "
// VARIADIC-NEXT: },
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "internalParam",
// VARIADIC-NEXT: "spelling": "block"
// VARIADIC-NEXT: }
// VARIADIC-NEXT: ],
// VARIADIC-NEXT: "name": "block"
// VARIADIC-NEXT: }
// VARIADIC-NEXT: ],
// VARIADIC-NEXT: "returns": [
// VARIADIC-NEXT: {
// VARIADIC-NEXT: "kind": "typeIdentifier",
// VARIADIC-NEXT: "preciseIdentifier": "c:v",
// VARIADIC-NEXT: "spelling": "void"
// VARIADIC-NEXT: }
// VARIADIC-NEXT: ]
// VARIADIC-NEXT: },
@end
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNC
void func(int (^arg)(int foo));
// FUNC-LABEL: "!testLabel": "c:@F@func"
// FUNC: "declarationFragments": [
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "typeIdentifier",
// FUNC-NEXT: "preciseIdentifier": "c:v",
// FUNC-NEXT: "spelling": "void"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": " "
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "identifier",
// FUNC-NEXT: "spelling": "func"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": "("
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "typeIdentifier",
// FUNC-NEXT: "preciseIdentifier": "c:I",
// FUNC-NEXT: "spelling": "int"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": " (^"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "internalParam",
// FUNC-NEXT: "spelling": "arg"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": ")("
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "typeIdentifier",
// FUNC-NEXT: "preciseIdentifier": "c:I",
// FUNC-NEXT: "spelling": "int"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": " "
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "internalParam",
// FUNC-NEXT: "spelling": "foo"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": "));"
// FUNC-NEXT: }
// FUNC-NEXT: ],
// FUNC: "functionSignature": {
// FUNC-NEXT: "parameters": [
// FUNC-NEXT: {
// FUNC-NEXT: "declarationFragments": [
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "typeIdentifier",
// FUNC-NEXT: "preciseIdentifier": "c:I",
// FUNC-NEXT: "spelling": "int"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": " (^"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "internalParam",
// FUNC-NEXT: "spelling": "arg"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": ")("
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "typeIdentifier",
// FUNC-NEXT: "preciseIdentifier": "c:I",
// FUNC-NEXT: "spelling": "int"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": " "
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "internalParam",
// FUNC-NEXT: "spelling": "foo"
// FUNC-NEXT: },
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "text",
// FUNC-NEXT: "spelling": ")"
// FUNC-NEXT: }
// FUNC-NEXT: ],
// FUNC-NEXT: "name": "arg"
// FUNC-NEXT: }
// FUNC-NEXT: ],
// FUNC-NEXT: "returns": [
// FUNC-NEXT: {
// FUNC-NEXT: "kind": "typeIdentifier",
// FUNC-NEXT: "preciseIdentifier": "c:v",
// FUNC-NEXT: "spelling": "void"
// FUNC-NEXT: }
// FUNC-NEXT: ]
// FUNC-NEXT: },
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GLOBAL
int (^global)(int foo);
// GLOBAL-LABEL: "!testLabel": "c:@global"
// GLOBAL: "declarationFragments": [
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "typeIdentifier",
// GLOBAL-NEXT: "preciseIdentifier": "c:I",
// GLOBAL-NEXT: "spelling": "int"
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "text",
// GLOBAL-NEXT: "spelling": " (^"
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "identifier",
// GLOBAL-NEXT: "spelling": "global"
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "text",
// GLOBAL-NEXT: "spelling": ")("
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "typeIdentifier",
// GLOBAL-NEXT: "preciseIdentifier": "c:I",
// GLOBAL-NEXT: "spelling": "int"
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "text",
// GLOBAL-NEXT: "spelling": " "
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "internalParam",
// GLOBAL-NEXT: "spelling": "foo"
// GLOBAL-NEXT: },
// GLOBAL-NEXT: {
// GLOBAL-NEXT: "kind": "text",
// GLOBAL-NEXT: "spelling": ");"
// GLOBAL-NEXT: }
// GLOBAL-NEXT: ],
///expected-no-diagnostics