1d8e9c5d9SErick Velez // RUN: rm -rf %t 2d8e9c5d9SErick Velez // RUN: split-file %s %t 3d8e9c5d9SErick Velez // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ 4d8e9c5d9SErick Velez // RUN: %t/reference.output.json.in >> %t/reference.output.json 5*e05c1b46SDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ 6d8e9c5d9SErick Velez // RUN: -x c++-header %t/input.h -o %t/output.json -verify 7d8e9c5d9SErick Velez 8d8e9c5d9SErick Velez // Generator version is not consistent across test runs, normalize it. 9d8e9c5d9SErick Velez // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ 10d8e9c5d9SErick Velez // RUN: %t/output.json >> %t/output-normalized.json 11d8e9c5d9SErick Velez // RUN: diff %t/reference.output.json %t/output-normalized.json 12d8e9c5d9SErick Velez 13d8e9c5d9SErick Velez //--- input.h 14d8e9c5d9SErick Velez class Foo { 15d8e9c5d9SErick Velez template<typename T> void Bar(T Fizz); 16d8e9c5d9SErick Velez 17d8e9c5d9SErick Velez template<> void Bar<int>(int Fizz); 18d8e9c5d9SErick Velez }; 19d8e9c5d9SErick Velez 20d8e9c5d9SErick Velez /// expected-no-diagnostics 21d8e9c5d9SErick Velez 22d8e9c5d9SErick Velez //--- reference.output.json.in 23d8e9c5d9SErick Velez { 24d8e9c5d9SErick Velez "metadata": { 25d8e9c5d9SErick Velez "formatVersion": { 26d8e9c5d9SErick Velez "major": 0, 27d8e9c5d9SErick Velez "minor": 5, 28d8e9c5d9SErick Velez "patch": 3 29d8e9c5d9SErick Velez }, 30d8e9c5d9SErick Velez "generator": "?" 31d8e9c5d9SErick Velez }, 32d8e9c5d9SErick Velez "module": { 33d8e9c5d9SErick Velez "name": "", 34d8e9c5d9SErick Velez "platform": { 35d8e9c5d9SErick Velez "architecture": "arm64", 36d8e9c5d9SErick Velez "operatingSystem": { 37d8e9c5d9SErick Velez "minimumVersion": { 38d8e9c5d9SErick Velez "major": 11, 39d8e9c5d9SErick Velez "minor": 0, 40d8e9c5d9SErick Velez "patch": 0 41d8e9c5d9SErick Velez }, 42d8e9c5d9SErick Velez "name": "macosx" 43d8e9c5d9SErick Velez }, 44d8e9c5d9SErick Velez "vendor": "apple" 45d8e9c5d9SErick Velez } 46d8e9c5d9SErick Velez }, 47d8e9c5d9SErick Velez "relationships": [ 48d8e9c5d9SErick Velez { 49d8e9c5d9SErick Velez "kind": "memberOf", 50d8e9c5d9SErick Velez "source": "c:@S@Foo@FT@>1#TBar#t0.0#v#", 51d8e9c5d9SErick Velez "target": "c:@S@Foo", 52d8e9c5d9SErick Velez "targetFallback": "Foo" 53d8e9c5d9SErick Velez }, 54d8e9c5d9SErick Velez { 55d8e9c5d9SErick Velez "kind": "memberOf", 56d8e9c5d9SErick Velez "source": "c:@S@Foo@F@Bar<#I>#I#", 57d8e9c5d9SErick Velez "target": "c:@S@Foo", 58d8e9c5d9SErick Velez "targetFallback": "Foo" 59d8e9c5d9SErick Velez } 60d8e9c5d9SErick Velez ], 61d8e9c5d9SErick Velez "symbols": [ 62d8e9c5d9SErick Velez { 63d8e9c5d9SErick Velez "accessLevel": "public", 64d8e9c5d9SErick Velez "declarationFragments": [ 65d8e9c5d9SErick Velez { 66d8e9c5d9SErick Velez "kind": "keyword", 67d8e9c5d9SErick Velez "spelling": "class" 68d8e9c5d9SErick Velez }, 69d8e9c5d9SErick Velez { 70d8e9c5d9SErick Velez "kind": "text", 71d8e9c5d9SErick Velez "spelling": " " 72d8e9c5d9SErick Velez }, 73d8e9c5d9SErick Velez { 74d8e9c5d9SErick Velez "kind": "identifier", 75d8e9c5d9SErick Velez "spelling": "Foo" 76d8e9c5d9SErick Velez }, 77d8e9c5d9SErick Velez { 78d8e9c5d9SErick Velez "kind": "text", 79d8e9c5d9SErick Velez "spelling": ";" 80d8e9c5d9SErick Velez } 81d8e9c5d9SErick Velez ], 82d8e9c5d9SErick Velez "identifier": { 83d8e9c5d9SErick Velez "interfaceLanguage": "c++", 84d8e9c5d9SErick Velez "precise": "c:@S@Foo" 85d8e9c5d9SErick Velez }, 86d8e9c5d9SErick Velez "kind": { 87d8e9c5d9SErick Velez "displayName": "Class", 88d8e9c5d9SErick Velez "identifier": "c++.class" 89d8e9c5d9SErick Velez }, 90d8e9c5d9SErick Velez "location": { 91d8e9c5d9SErick Velez "position": { 9263537872SQuietMisdreavus "character": 6, 9363537872SQuietMisdreavus "line": 0 94d8e9c5d9SErick Velez }, 95d8e9c5d9SErick Velez "uri": "file://INPUT_DIR/input.h" 96d8e9c5d9SErick Velez }, 97d8e9c5d9SErick Velez "names": { 98d8e9c5d9SErick Velez "navigator": [ 99d8e9c5d9SErick Velez { 100d8e9c5d9SErick Velez "kind": "identifier", 101d8e9c5d9SErick Velez "spelling": "Foo" 102d8e9c5d9SErick Velez } 103d8e9c5d9SErick Velez ], 104d8e9c5d9SErick Velez "subHeading": [ 105d8e9c5d9SErick Velez { 106d8e9c5d9SErick Velez "kind": "identifier", 107d8e9c5d9SErick Velez "spelling": "Foo" 108d8e9c5d9SErick Velez } 109d8e9c5d9SErick Velez ], 110d8e9c5d9SErick Velez "title": "Foo" 111d8e9c5d9SErick Velez }, 112d8e9c5d9SErick Velez "pathComponents": [ 113d8e9c5d9SErick Velez "Foo" 114d8e9c5d9SErick Velez ] 115d8e9c5d9SErick Velez }, 116d8e9c5d9SErick Velez { 117d8e9c5d9SErick Velez "accessLevel": "private", 118d8e9c5d9SErick Velez "declarationFragments": [ 119d8e9c5d9SErick Velez { 120d8e9c5d9SErick Velez "kind": "keyword", 121d8e9c5d9SErick Velez "spelling": "template" 122d8e9c5d9SErick Velez }, 123d8e9c5d9SErick Velez { 124d8e9c5d9SErick Velez "kind": "text", 125d8e9c5d9SErick Velez "spelling": " <" 126d8e9c5d9SErick Velez }, 127d8e9c5d9SErick Velez { 128d8e9c5d9SErick Velez "kind": "keyword", 129d8e9c5d9SErick Velez "spelling": "typename" 130d8e9c5d9SErick Velez }, 131d8e9c5d9SErick Velez { 132d8e9c5d9SErick Velez "kind": "text", 133d8e9c5d9SErick Velez "spelling": " " 134d8e9c5d9SErick Velez }, 135d8e9c5d9SErick Velez { 136d8e9c5d9SErick Velez "kind": "genericParameter", 137d8e9c5d9SErick Velez "spelling": "T" 138d8e9c5d9SErick Velez }, 139d8e9c5d9SErick Velez { 140d8e9c5d9SErick Velez "kind": "text", 141d8e9c5d9SErick Velez "spelling": "> " 142d8e9c5d9SErick Velez }, 143d8e9c5d9SErick Velez { 144d8e9c5d9SErick Velez "kind": "typeIdentifier", 145d8e9c5d9SErick Velez "preciseIdentifier": "c:v", 146d8e9c5d9SErick Velez "spelling": "void" 147d8e9c5d9SErick Velez }, 148d8e9c5d9SErick Velez { 149d8e9c5d9SErick Velez "kind": "text", 150d8e9c5d9SErick Velez "spelling": " " 151d8e9c5d9SErick Velez }, 152d8e9c5d9SErick Velez { 153d8e9c5d9SErick Velez "kind": "identifier", 154d8e9c5d9SErick Velez "spelling": "Bar" 155d8e9c5d9SErick Velez }, 156d8e9c5d9SErick Velez { 157d8e9c5d9SErick Velez "kind": "text", 158d8e9c5d9SErick Velez "spelling": "(" 159d8e9c5d9SErick Velez }, 160d8e9c5d9SErick Velez { 161d8e9c5d9SErick Velez "kind": "typeIdentifier", 162d8e9c5d9SErick Velez "preciseIdentifier": "c:t0.0", 163d8e9c5d9SErick Velez "spelling": "T" 164d8e9c5d9SErick Velez }, 165d8e9c5d9SErick Velez { 166d8e9c5d9SErick Velez "kind": "text", 167d8e9c5d9SErick Velez "spelling": " " 168d8e9c5d9SErick Velez }, 169d8e9c5d9SErick Velez { 170d8e9c5d9SErick Velez "kind": "internalParam", 171d8e9c5d9SErick Velez "spelling": "Fizz" 172d8e9c5d9SErick Velez }, 173d8e9c5d9SErick Velez { 174d8e9c5d9SErick Velez "kind": "text", 175d8e9c5d9SErick Velez "spelling": ");" 176d8e9c5d9SErick Velez } 177d8e9c5d9SErick Velez ], 178d8e9c5d9SErick Velez "functionSignature": { 179d8e9c5d9SErick Velez "parameters": [ 180d8e9c5d9SErick Velez { 181d8e9c5d9SErick Velez "declarationFragments": [ 182d8e9c5d9SErick Velez { 183d8e9c5d9SErick Velez "kind": "typeIdentifier", 184d8e9c5d9SErick Velez "preciseIdentifier": "c:t0.0", 185d8e9c5d9SErick Velez "spelling": "T" 186d8e9c5d9SErick Velez }, 187d8e9c5d9SErick Velez { 188d8e9c5d9SErick Velez "kind": "text", 189d8e9c5d9SErick Velez "spelling": " " 190d8e9c5d9SErick Velez }, 191d8e9c5d9SErick Velez { 192d8e9c5d9SErick Velez "kind": "internalParam", 193d8e9c5d9SErick Velez "spelling": "Fizz" 194d8e9c5d9SErick Velez } 195d8e9c5d9SErick Velez ], 196d8e9c5d9SErick Velez "name": "Fizz" 197d8e9c5d9SErick Velez } 198d8e9c5d9SErick Velez ], 199d8e9c5d9SErick Velez "returns": [ 200d8e9c5d9SErick Velez { 201d8e9c5d9SErick Velez "kind": "typeIdentifier", 202d8e9c5d9SErick Velez "preciseIdentifier": "c:v", 203d8e9c5d9SErick Velez "spelling": "void" 204d8e9c5d9SErick Velez } 205d8e9c5d9SErick Velez ] 206d8e9c5d9SErick Velez }, 207d8e9c5d9SErick Velez "identifier": { 208d8e9c5d9SErick Velez "interfaceLanguage": "c++", 209d8e9c5d9SErick Velez "precise": "c:@S@Foo@FT@>1#TBar#t0.0#v#" 210d8e9c5d9SErick Velez }, 211d8e9c5d9SErick Velez "kind": { 212d8e9c5d9SErick Velez "displayName": "Method Template", 213d8e9c5d9SErick Velez "identifier": "c++.method" 214d8e9c5d9SErick Velez }, 215d8e9c5d9SErick Velez "location": { 216d8e9c5d9SErick Velez "position": { 21763537872SQuietMisdreavus "character": 28, 21863537872SQuietMisdreavus "line": 1 219d8e9c5d9SErick Velez }, 220d8e9c5d9SErick Velez "uri": "file://INPUT_DIR/input.h" 221d8e9c5d9SErick Velez }, 222d8e9c5d9SErick Velez "names": { 223d8e9c5d9SErick Velez "navigator": [ 224d8e9c5d9SErick Velez { 225d8e9c5d9SErick Velez "kind": "identifier", 226d8e9c5d9SErick Velez "spelling": "Bar" 227d8e9c5d9SErick Velez } 228d8e9c5d9SErick Velez ], 229d8e9c5d9SErick Velez "subHeading": [ 230d8e9c5d9SErick Velez { 231d8e9c5d9SErick Velez "kind": "identifier", 232d8e9c5d9SErick Velez "spelling": "Bar" 233d8e9c5d9SErick Velez } 234d8e9c5d9SErick Velez ], 235d8e9c5d9SErick Velez "title": "Bar" 236d8e9c5d9SErick Velez }, 237d8e9c5d9SErick Velez "pathComponents": [ 238d8e9c5d9SErick Velez "Foo", 239d8e9c5d9SErick Velez "Bar" 240d8e9c5d9SErick Velez ], 241d8e9c5d9SErick Velez "swiftGenerics": { 242d8e9c5d9SErick Velez "parameters": [ 243d8e9c5d9SErick Velez { 244d8e9c5d9SErick Velez "depth": 0, 245d8e9c5d9SErick Velez "index": 0, 246d8e9c5d9SErick Velez "name": "T" 247d8e9c5d9SErick Velez } 248d8e9c5d9SErick Velez ] 249d8e9c5d9SErick Velez } 250d8e9c5d9SErick Velez }, 251d8e9c5d9SErick Velez { 252d8e9c5d9SErick Velez "accessLevel": "private", 253d8e9c5d9SErick Velez "declarationFragments": [ 254d8e9c5d9SErick Velez { 255d8e9c5d9SErick Velez "kind": "keyword", 256d8e9c5d9SErick Velez "spelling": "template" 257d8e9c5d9SErick Velez }, 258d8e9c5d9SErick Velez { 259d8e9c5d9SErick Velez "kind": "text", 260d8e9c5d9SErick Velez "spelling": " <> " 261d8e9c5d9SErick Velez }, 262d8e9c5d9SErick Velez { 263d8e9c5d9SErick Velez "kind": "typeIdentifier", 264d8e9c5d9SErick Velez "preciseIdentifier": "c:v", 265d8e9c5d9SErick Velez "spelling": "void" 266d8e9c5d9SErick Velez }, 267d8e9c5d9SErick Velez { 268d8e9c5d9SErick Velez "kind": "text", 269d8e9c5d9SErick Velez "spelling": " " 270d8e9c5d9SErick Velez }, 271d8e9c5d9SErick Velez { 272d8e9c5d9SErick Velez "kind": "identifier", 273d8e9c5d9SErick Velez "spelling": "Bar" 274d8e9c5d9SErick Velez }, 275d8e9c5d9SErick Velez { 276d8e9c5d9SErick Velez "kind": "text", 277d8e9c5d9SErick Velez "spelling": "<" 278d8e9c5d9SErick Velez }, 279d8e9c5d9SErick Velez { 280d8e9c5d9SErick Velez "kind": "typeIdentifier", 281d8e9c5d9SErick Velez "preciseIdentifier": "c:I", 282d8e9c5d9SErick Velez "spelling": "int" 283d8e9c5d9SErick Velez }, 284d8e9c5d9SErick Velez { 285d8e9c5d9SErick Velez "kind": "text", 286d8e9c5d9SErick Velez "spelling": ">(" 287d8e9c5d9SErick Velez }, 288d8e9c5d9SErick Velez { 289d8e9c5d9SErick Velez "kind": "typeIdentifier", 290d8e9c5d9SErick Velez "preciseIdentifier": "c:I", 291d8e9c5d9SErick Velez "spelling": "int" 292d8e9c5d9SErick Velez }, 293d8e9c5d9SErick Velez { 294d8e9c5d9SErick Velez "kind": "text", 295d8e9c5d9SErick Velez "spelling": " " 296d8e9c5d9SErick Velez }, 297d8e9c5d9SErick Velez { 298d8e9c5d9SErick Velez "kind": "internalParam", 299d8e9c5d9SErick Velez "spelling": "Fizz" 300d8e9c5d9SErick Velez }, 301d8e9c5d9SErick Velez { 302d8e9c5d9SErick Velez "kind": "text", 303d8e9c5d9SErick Velez "spelling": ");" 304d8e9c5d9SErick Velez } 305d8e9c5d9SErick Velez ], 306d8e9c5d9SErick Velez "functionSignature": { 307d8e9c5d9SErick Velez "parameters": [ 308d8e9c5d9SErick Velez { 309d8e9c5d9SErick Velez "declarationFragments": [ 310d8e9c5d9SErick Velez { 311d8e9c5d9SErick Velez "kind": "typeIdentifier", 312d8e9c5d9SErick Velez "preciseIdentifier": "c:I", 313d8e9c5d9SErick Velez "spelling": "int" 314d8e9c5d9SErick Velez }, 315d8e9c5d9SErick Velez { 316d8e9c5d9SErick Velez "kind": "text", 317d8e9c5d9SErick Velez "spelling": " " 318d8e9c5d9SErick Velez }, 319d8e9c5d9SErick Velez { 320d8e9c5d9SErick Velez "kind": "internalParam", 321d8e9c5d9SErick Velez "spelling": "Fizz" 322d8e9c5d9SErick Velez } 323d8e9c5d9SErick Velez ], 324d8e9c5d9SErick Velez "name": "Fizz" 325d8e9c5d9SErick Velez } 326d8e9c5d9SErick Velez ], 327d8e9c5d9SErick Velez "returns": [ 328d8e9c5d9SErick Velez { 329d8e9c5d9SErick Velez "kind": "typeIdentifier", 330d8e9c5d9SErick Velez "preciseIdentifier": "c:v", 331d8e9c5d9SErick Velez "spelling": "void" 332d8e9c5d9SErick Velez } 333d8e9c5d9SErick Velez ] 334d8e9c5d9SErick Velez }, 335d8e9c5d9SErick Velez "identifier": { 336d8e9c5d9SErick Velez "interfaceLanguage": "c++", 337d8e9c5d9SErick Velez "precise": "c:@S@Foo@F@Bar<#I>#I#" 338d8e9c5d9SErick Velez }, 339d8e9c5d9SErick Velez "kind": { 340d8e9c5d9SErick Velez "displayName": "Method Template Specialization", 341d8e9c5d9SErick Velez "identifier": "c++.method" 342d8e9c5d9SErick Velez }, 343d8e9c5d9SErick Velez "location": { 344d8e9c5d9SErick Velez "position": { 34563537872SQuietMisdreavus "character": 18, 34663537872SQuietMisdreavus "line": 3 347d8e9c5d9SErick Velez }, 348d8e9c5d9SErick Velez "uri": "file://INPUT_DIR/input.h" 349d8e9c5d9SErick Velez }, 350d8e9c5d9SErick Velez "names": { 351d8e9c5d9SErick Velez "navigator": [ 352d8e9c5d9SErick Velez { 353d8e9c5d9SErick Velez "kind": "identifier", 354d8e9c5d9SErick Velez "spelling": "Bar" 355d8e9c5d9SErick Velez } 356d8e9c5d9SErick Velez ], 357d8e9c5d9SErick Velez "subHeading": [ 358d8e9c5d9SErick Velez { 359d8e9c5d9SErick Velez "kind": "identifier", 360d8e9c5d9SErick Velez "spelling": "Bar" 361d8e9c5d9SErick Velez } 362d8e9c5d9SErick Velez ], 363d8e9c5d9SErick Velez "title": "Bar" 364d8e9c5d9SErick Velez }, 365d8e9c5d9SErick Velez "pathComponents": [ 366d8e9c5d9SErick Velez "Foo", 367d8e9c5d9SErick Velez "Bar" 368d8e9c5d9SErick Velez ] 369d8e9c5d9SErick Velez } 370d8e9c5d9SErick Velez ] 371d8e9c5d9SErick Velez } 372