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 class Foo { 15 template<typename T> void Bar(T Fizz); 16 }; 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 { 47 "kind": "memberOf", 48 "source": "c:@S@Foo@FT@>1#TBar#t0.0#v#", 49 "target": "c:@S@Foo", 50 "targetFallback": "Foo" 51 } 52 ], 53 "symbols": [ 54 { 55 "accessLevel": "public", 56 "declarationFragments": [ 57 { 58 "kind": "keyword", 59 "spelling": "class" 60 }, 61 { 62 "kind": "text", 63 "spelling": " " 64 }, 65 { 66 "kind": "identifier", 67 "spelling": "Foo" 68 }, 69 { 70 "kind": "text", 71 "spelling": ";" 72 } 73 ], 74 "identifier": { 75 "interfaceLanguage": "c++", 76 "precise": "c:@S@Foo" 77 }, 78 "kind": { 79 "displayName": "Class", 80 "identifier": "c++.class" 81 }, 82 "location": { 83 "position": { 84 "character": 6, 85 "line": 0 86 }, 87 "uri": "file://INPUT_DIR/input.h" 88 }, 89 "names": { 90 "navigator": [ 91 { 92 "kind": "identifier", 93 "spelling": "Foo" 94 } 95 ], 96 "subHeading": [ 97 { 98 "kind": "identifier", 99 "spelling": "Foo" 100 } 101 ], 102 "title": "Foo" 103 }, 104 "pathComponents": [ 105 "Foo" 106 ] 107 }, 108 { 109 "accessLevel": "private", 110 "declarationFragments": [ 111 { 112 "kind": "keyword", 113 "spelling": "template" 114 }, 115 { 116 "kind": "text", 117 "spelling": " <" 118 }, 119 { 120 "kind": "keyword", 121 "spelling": "typename" 122 }, 123 { 124 "kind": "text", 125 "spelling": " " 126 }, 127 { 128 "kind": "genericParameter", 129 "spelling": "T" 130 }, 131 { 132 "kind": "text", 133 "spelling": "> " 134 }, 135 { 136 "kind": "typeIdentifier", 137 "preciseIdentifier": "c:v", 138 "spelling": "void" 139 }, 140 { 141 "kind": "text", 142 "spelling": " " 143 }, 144 { 145 "kind": "identifier", 146 "spelling": "Bar" 147 }, 148 { 149 "kind": "text", 150 "spelling": "(" 151 }, 152 { 153 "kind": "typeIdentifier", 154 "preciseIdentifier": "c:t0.0", 155 "spelling": "T" 156 }, 157 { 158 "kind": "text", 159 "spelling": " " 160 }, 161 { 162 "kind": "internalParam", 163 "spelling": "Fizz" 164 }, 165 { 166 "kind": "text", 167 "spelling": ");" 168 } 169 ], 170 "functionSignature": { 171 "parameters": [ 172 { 173 "declarationFragments": [ 174 { 175 "kind": "typeIdentifier", 176 "preciseIdentifier": "c:t0.0", 177 "spelling": "T" 178 }, 179 { 180 "kind": "text", 181 "spelling": " " 182 }, 183 { 184 "kind": "internalParam", 185 "spelling": "Fizz" 186 } 187 ], 188 "name": "Fizz" 189 } 190 ], 191 "returns": [ 192 { 193 "kind": "typeIdentifier", 194 "preciseIdentifier": "c:v", 195 "spelling": "void" 196 } 197 ] 198 }, 199 "identifier": { 200 "interfaceLanguage": "c++", 201 "precise": "c:@S@Foo@FT@>1#TBar#t0.0#v#" 202 }, 203 "kind": { 204 "displayName": "Method Template", 205 "identifier": "c++.method" 206 }, 207 "location": { 208 "position": { 209 "character": 28, 210 "line": 1 211 }, 212 "uri": "file://INPUT_DIR/input.h" 213 }, 214 "names": { 215 "navigator": [ 216 { 217 "kind": "identifier", 218 "spelling": "Bar" 219 } 220 ], 221 "subHeading": [ 222 { 223 "kind": "identifier", 224 "spelling": "Bar" 225 } 226 ], 227 "title": "Bar" 228 }, 229 "pathComponents": [ 230 "Foo", 231 "Bar" 232 ], 233 "swiftGenerics": { 234 "parameters": [ 235 { 236 "depth": 0, 237 "index": 0, 238 "name": "T" 239 } 240 ] 241 } 242 } 243 ] 244 } 245