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 X, typename Y> int Foo = 0; 15 16 template<typename Z> int Foo<int, Z> = 0; 17 /// expected-no-diagnostics 18 19 //--- reference.output.json.in 20 { 21 "metadata": { 22 "formatVersion": { 23 "major": 0, 24 "minor": 5, 25 "patch": 3 26 }, 27 "generator": "?" 28 }, 29 "module": { 30 "name": "", 31 "platform": { 32 "architecture": "arm64", 33 "operatingSystem": { 34 "minimumVersion": { 35 "major": 11, 36 "minor": 0, 37 "patch": 0 38 }, 39 "name": "macosx" 40 }, 41 "vendor": "apple" 42 } 43 }, 44 "relationships": [], 45 "symbols": [ 46 { 47 "accessLevel": "public", 48 "declarationFragments": [ 49 { 50 "kind": "keyword", 51 "spelling": "template" 52 }, 53 { 54 "kind": "text", 55 "spelling": " <" 56 }, 57 { 58 "kind": "keyword", 59 "spelling": "typename" 60 }, 61 { 62 "kind": "text", 63 "spelling": " " 64 }, 65 { 66 "kind": "genericParameter", 67 "spelling": "X" 68 }, 69 { 70 "kind": "text", 71 "spelling": ", " 72 }, 73 { 74 "kind": "keyword", 75 "spelling": "typename" 76 }, 77 { 78 "kind": "text", 79 "spelling": " " 80 }, 81 { 82 "kind": "genericParameter", 83 "spelling": "Y" 84 }, 85 { 86 "kind": "text", 87 "spelling": "> " 88 }, 89 { 90 "kind": "typeIdentifier", 91 "preciseIdentifier": "c:I", 92 "spelling": "int" 93 }, 94 { 95 "kind": "text", 96 "spelling": " " 97 }, 98 { 99 "kind": "identifier", 100 "spelling": "Foo" 101 }, 102 { 103 "kind": "text", 104 "spelling": ";" 105 } 106 ], 107 "identifier": { 108 "interfaceLanguage": "c++", 109 "precise": "c:@Foo" 110 }, 111 "kind": { 112 "displayName": "Global Variable Template", 113 "identifier": "c++.var" 114 }, 115 "location": { 116 "position": { 117 "character": 37, 118 "line": 0 119 }, 120 "uri": "file://INPUT_DIR/input.h" 121 }, 122 "names": { 123 "navigator": [ 124 { 125 "kind": "identifier", 126 "spelling": "Foo" 127 } 128 ], 129 "subHeading": [ 130 { 131 "kind": "identifier", 132 "spelling": "Foo" 133 } 134 ], 135 "title": "Foo" 136 }, 137 "pathComponents": [ 138 "Foo" 139 ], 140 "swiftGenerics": { 141 "parameters": [ 142 { 143 "depth": 0, 144 "index": 0, 145 "name": "X" 146 }, 147 { 148 "depth": 0, 149 "index": 1, 150 "name": "Y" 151 } 152 ] 153 } 154 }, 155 { 156 "accessLevel": "public", 157 "declarationFragments": [ 158 { 159 "kind": "keyword", 160 "spelling": "template" 161 }, 162 { 163 "kind": "text", 164 "spelling": " <" 165 }, 166 { 167 "kind": "keyword", 168 "spelling": "typename" 169 }, 170 { 171 "kind": "text", 172 "spelling": " " 173 }, 174 { 175 "kind": "genericParameter", 176 "spelling": "Z" 177 }, 178 { 179 "kind": "text", 180 "spelling": "> " 181 }, 182 { 183 "kind": "typeIdentifier", 184 "preciseIdentifier": "c:I", 185 "spelling": "int" 186 }, 187 { 188 "kind": "text", 189 "spelling": " " 190 }, 191 { 192 "kind": "identifier", 193 "spelling": "Foo" 194 }, 195 { 196 "kind": "text", 197 "spelling": "<" 198 }, 199 { 200 "kind": "typeIdentifier", 201 "preciseIdentifier": "c:I", 202 "spelling": "int" 203 }, 204 { 205 "kind": "text", 206 "spelling": ", " 207 }, 208 { 209 "kind": "typeIdentifier", 210 "preciseIdentifier": "c:t0.0", 211 "spelling": "Z" 212 }, 213 { 214 "kind": "text", 215 "spelling": ">;" 216 } 217 ], 218 "identifier": { 219 "interfaceLanguage": "c++", 220 "precise": "c:@VP>1#T@Foo>#I#t0.0" 221 }, 222 "kind": { 223 "displayName": "Global Variable Template Partial Specialization", 224 "identifier": "c++.var" 225 }, 226 "location": { 227 "position": { 228 "character": 25, 229 "line": 2 230 }, 231 "uri": "file://INPUT_DIR/input.h" 232 }, 233 "names": { 234 "navigator": [ 235 { 236 "kind": "identifier", 237 "spelling": "Foo" 238 } 239 ], 240 "subHeading": [ 241 { 242 "kind": "identifier", 243 "spelling": "Foo" 244 } 245 ], 246 "title": "Foo" 247 }, 248 "pathComponents": [ 249 "Foo" 250 ], 251 "swiftGenerics": { 252 "parameters": [ 253 { 254 "depth": 0, 255 "index": 0, 256 "name": "Z" 257 } 258 ] 259 } 260 } 261 ] 262 } 263