1 // RUN: rm -rf %t 2 // RUN: split-file %s %t 3 // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ 4 // RUN: %t/reference.output.json.in >> %t/reference.output.json 5 // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ 6 // RUN: -x c++-header %t/input.h -o %t/output.json -verify 7 8 // Generator version is not consistent across test runs, normalize it. 9 // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ 10 // RUN: %t/output.json >> %t/output-normalized.json 11 // RUN: diff %t/reference.output.json %t/output-normalized.json 12 13 //--- input.h 14 template<typename T> class Foo {}; 15 16 template<> class Foo<int> {}; 17 18 /// expected-no-diagnostics 19 20 //--- reference.output.json.in 21 { 22 "metadata": { 23 "formatVersion": { 24 "major": 0, 25 "minor": 5, 26 "patch": 3 27 }, 28 "generator": "?" 29 }, 30 "module": { 31 "name": "", 32 "platform": { 33 "architecture": "arm64", 34 "operatingSystem": { 35 "minimumVersion": { 36 "major": 11, 37 "minor": 0, 38 "patch": 0 39 }, 40 "name": "macosx" 41 }, 42 "vendor": "apple" 43 } 44 }, 45 "relationships": [], 46 "symbols": [ 47 { 48 "accessLevel": "public", 49 "declarationFragments": [ 50 { 51 "kind": "keyword", 52 "spelling": "template" 53 }, 54 { 55 "kind": "text", 56 "spelling": " <" 57 }, 58 { 59 "kind": "keyword", 60 "spelling": "typename" 61 }, 62 { 63 "kind": "text", 64 "spelling": " " 65 }, 66 { 67 "kind": "genericParameter", 68 "spelling": "T" 69 }, 70 { 71 "kind": "text", 72 "spelling": "> " 73 }, 74 { 75 "kind": "keyword", 76 "spelling": "class" 77 }, 78 { 79 "kind": "text", 80 "spelling": " " 81 }, 82 { 83 "kind": "identifier", 84 "spelling": "Foo" 85 }, 86 { 87 "kind": "text", 88 "spelling": ";" 89 } 90 ], 91 "identifier": { 92 "interfaceLanguage": "c++", 93 "precise": "c:@ST>1#T@Foo" 94 }, 95 "kind": { 96 "displayName": "Class", 97 "identifier": "c++.class" 98 }, 99 "location": { 100 "position": { 101 "character": 27, 102 "line": 0 103 }, 104 "uri": "file://INPUT_DIR/input.h" 105 }, 106 "names": { 107 "navigator": [ 108 { 109 "kind": "identifier", 110 "spelling": "Foo" 111 } 112 ], 113 "subHeading": [ 114 { 115 "kind": "identifier", 116 "spelling": "Foo" 117 } 118 ], 119 "title": "Foo" 120 }, 121 "pathComponents": [ 122 "Foo" 123 ], 124 "swiftGenerics": { 125 "parameters": [ 126 { 127 "depth": 0, 128 "index": 0, 129 "name": "T" 130 } 131 ] 132 } 133 }, 134 { 135 "accessLevel": "public", 136 "declarationFragments": [ 137 { 138 "kind": "keyword", 139 "spelling": "template" 140 }, 141 { 142 "kind": "text", 143 "spelling": " <> " 144 }, 145 { 146 "kind": "keyword", 147 "spelling": "class" 148 }, 149 { 150 "kind": "text", 151 "spelling": " " 152 }, 153 { 154 "kind": "identifier", 155 "spelling": "Foo" 156 }, 157 { 158 "kind": "text", 159 "spelling": "<" 160 }, 161 { 162 "kind": "typeIdentifier", 163 "preciseIdentifier": "c:I", 164 "spelling": "int" 165 }, 166 { 167 "kind": "text", 168 "spelling": ">;" 169 } 170 ], 171 "identifier": { 172 "interfaceLanguage": "c++", 173 "precise": "c:@S@Foo>#I" 174 }, 175 "kind": { 176 "displayName": "Class", 177 "identifier": "c++.class" 178 }, 179 "location": { 180 "position": { 181 "character": 17, 182 "line": 2 183 }, 184 "uri": "file://INPUT_DIR/input.h" 185 }, 186 "names": { 187 "navigator": [ 188 { 189 "kind": "identifier", 190 "spelling": "Foo" 191 } 192 ], 193 "subHeading": [ 194 { 195 "kind": "identifier", 196 "spelling": "Foo" 197 } 198 ], 199 "title": "Foo" 200 }, 201 "pathComponents": [ 202 "Foo" 203 ] 204 } 205 ] 206 } 207