1 // RUN: rm -rf %t 2 // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ 3 // RUN: -x c-header %s -triple arm64-apple-macos -o %t/output.symbols.json -verify 4 5 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TEST 6 typedef struct Test { 7 } Test; 8 // TEST-LABEL: "!testLabel": "c:@S@Test" 9 // TEST: "declarationFragments": [ 10 // TEST-NEXT: { 11 // TEST-NEXT: "kind": "keyword", 12 // TEST-NEXT: "spelling": "typedef" 13 // TEST-NEXT: }, 14 // TEST-NEXT: { 15 // TEST-NEXT: "kind": "text", 16 // TEST-NEXT: "spelling": " " 17 // TEST-NEXT: }, 18 // TEST-NEXT: { 19 // TEST-NEXT: "kind": "keyword", 20 // TEST-NEXT: "spelling": "struct" 21 // TEST-NEXT: }, 22 // TEST-NEXT: { 23 // TEST-NEXT: "kind": "text", 24 // TEST-NEXT: "spelling": " " 25 // TEST-NEXT: }, 26 // TEST-NEXT: { 27 // TEST-NEXT: "kind": "identifier", 28 // TEST-NEXT: "spelling": "Test" 29 // TEST-NEXT: }, 30 // TEST-NEXT: { 31 // TEST-NEXT: "kind": "text", 32 // TEST-NEXT: "spelling": " { ... } " 33 // TEST-NEXT: }, 34 // TEST-NEXT: { 35 // TEST-NEXT: "kind": "identifier", 36 // TEST-NEXT: "spelling": "Test" 37 // TEST-NEXT: }, 38 // TEST-NEXT: { 39 // TEST-NEXT: "kind": "text", 40 // TEST-NEXT: "spelling": ";" 41 // TEST-NEXT: } 42 // TEST-NEXT: ], 43 // TEST: "displayName": "Structure", 44 // TEST: "title": "Test" 45 46 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TEST2 47 typedef enum Test2 { 48 simple 49 } Test2; 50 51 // TEST2-LABEL: "!testLabel": "c:@E@Test2" 52 // TEST2: "declarationFragments": [ 53 // TEST2-NEXT: { 54 // TEST2-NEXT: "kind": "keyword", 55 // TEST2-NEXT: "spelling": "typedef" 56 // TEST2-NEXT: }, 57 // TEST2-NEXT: { 58 // TEST2-NEXT: "kind": "text", 59 // TEST2-NEXT: "spelling": " " 60 // TEST2-NEXT: }, 61 // TEST2-NEXT: { 62 // TEST2-NEXT: "kind": "keyword", 63 // TEST2-NEXT: "spelling": "enum" 64 // TEST2-NEXT: }, 65 // TEST2-NEXT: { 66 // TEST2-NEXT: "kind": "text", 67 // TEST2-NEXT: "spelling": " " 68 // TEST2-NEXT: }, 69 // TEST2-NEXT: { 70 // TEST2-NEXT: "kind": "identifier", 71 // TEST2-NEXT: "spelling": "Test2" 72 // TEST2-NEXT: }, 73 // TEST2-NEXT: { 74 // TEST2-NEXT: "kind": "text", 75 // TEST2-NEXT: "spelling": " : " 76 // TEST2-NEXT: }, 77 // TEST2-NEXT: { 78 // TEST2-NEXT: "kind": "typeIdentifier", 79 // TEST2-NEXT: "preciseIdentifier": "c:i", 80 // TEST2-NEXT: "spelling": "unsigned int" 81 // TEST2-NEXT: }, 82 // TEST2-NEXT: { 83 // TEST2-NEXT: "kind": "text", 84 // TEST2-NEXT: "spelling": " { ... } " 85 // TEST2-NEXT: }, 86 // TEST2-NEXT: { 87 // TEST2-NEXT: "kind": "identifier", 88 // TEST2-NEXT: "spelling": "Test2" 89 // TEST2-NEXT: }, 90 // TEST2-NEXT: { 91 // TEST2-NEXT: "kind": "text", 92 // TEST2-NEXT: "spelling": ";" 93 // TEST2-NEXT: } 94 // TEST2-NEXT: ], 95 // TEST2: "displayName": "Enumeration", 96 // TEST2: "title": "Test2" 97 98 struct Foo; 99 100 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TYPEDEF 101 typedef struct Foo TypedefedFoo; 102 // TYPEDEF-LABEL: "!testLabel": "c:typedef_struct_enum.c@T@TypedefedFoo" 103 // TYPEDEF: "declarationFragments": [ 104 // TYPEDEF-NEXT: { 105 // TYPEDEF-NEXT: "kind": "keyword", 106 // TYPEDEF-NEXT: "spelling": "typedef" 107 // TYPEDEF-NEXT: }, 108 // TYPEDEF-NEXT: { 109 // TYPEDEF-NEXT: "kind": "text", 110 // TYPEDEF-NEXT: "spelling": " " 111 // TYPEDEF-NEXT: }, 112 // TYPEDEF-NEXT: { 113 // TYPEDEF-NEXT: "kind": "keyword", 114 // TYPEDEF-NEXT: "spelling": "struct" 115 // TYPEDEF-NEXT: }, 116 // TYPEDEF-NEXT: { 117 // TYPEDEF-NEXT: "kind": "text", 118 // TYPEDEF-NEXT: "spelling": " " 119 // TYPEDEF-NEXT: }, 120 // TYPEDEF-NEXT: { 121 // TYPEDEF-NEXT: "kind": "typeIdentifier", 122 // TYPEDEF-NEXT: "preciseIdentifier": "c:@S@Foo", 123 // TYPEDEF-NEXT: "spelling": "Foo" 124 // TYPEDEF-NEXT: }, 125 // TYPEDEF-NEXT: { 126 // TYPEDEF-NEXT: "kind": "text", 127 // TYPEDEF-NEXT: "spelling": " " 128 // TYPEDEF-NEXT: }, 129 // TYPEDEF-NEXT: { 130 // TYPEDEF-NEXT: "kind": "identifier", 131 // TYPEDEF-NEXT: "spelling": "TypedefedFoo" 132 // TYPEDEF-NEXT: }, 133 // TYPEDEF-NEXT: { 134 // TYPEDEF-NEXT: "kind": "text", 135 // TYPEDEF-NEXT: "spelling": ";" 136 // TYPEDEF-NEXT: } 137 // TYPEDEF-NEXT: ], 138 // TYPEDEF: "displayName": "Type Alias", 139 // TYPEDEF: "title": "TypedefedFoo" 140 // TYPEDEF: "type": "c:@S@Foo" 141 142 struct Foo { 143 int bar; 144 }; 145 146 // expected-no-diagnostics 147