1529a0570SDaniel Grumberg // RUN: rm -rf %t 2529a0570SDaniel Grumberg // RUN: split-file %s %t 3e08c4354SZixu Wang // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ 4e08c4354SZixu Wang // RUN: %t/reference.output.json.in >> %t/reference.output.json 5*e05c1b46SDaniel Grumberg // RUN: %clang -extract-api --pretty-sgf --product-name=Macros -target arm64-apple-macosx \ 6529a0570SDaniel Grumberg // RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s 7529a0570SDaniel Grumberg 8529a0570SDaniel Grumberg // Generator version is not consistent across test runs, normalize it. 9529a0570SDaniel Grumberg // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ 10529a0570SDaniel Grumberg // RUN: %t/output.json >> %t/output-normalized.json 11529a0570SDaniel Grumberg // RUN: diff %t/reference.output.json %t/output-normalized.json 12529a0570SDaniel Grumberg 13529a0570SDaniel Grumberg // CHECK-NOT: error: 14529a0570SDaniel Grumberg // CHECK-NOT: warning: 15529a0570SDaniel Grumberg 16529a0570SDaniel Grumberg //--- input.h 17529a0570SDaniel Grumberg #define HELLO 1 18529a0570SDaniel Grumberg #define FUNC_GEN(NAME, ...) void NAME(__VA_ARGS__); 19529a0570SDaniel Grumberg FUNC_GEN(foo) 20529a0570SDaniel Grumberg FUNC_GEN(bar, const int *, unsigned); 21529a0570SDaniel Grumberg #undef FUNC_GEN 228b63622bSDaniel Grumberg // Undefining a not previously defined macro should not result in a crash. 238b63622bSDaniel Grumberg #undef FOO 24529a0570SDaniel Grumberg 25529a0570SDaniel Grumberg //--- reference.output.json.in 26529a0570SDaniel Grumberg { 27529a0570SDaniel Grumberg "metadata": { 28529a0570SDaniel Grumberg "formatVersion": { 29529a0570SDaniel Grumberg "major": 0, 30529a0570SDaniel Grumberg "minor": 5, 31529a0570SDaniel Grumberg "patch": 3 32529a0570SDaniel Grumberg }, 33529a0570SDaniel Grumberg "generator": "?" 34529a0570SDaniel Grumberg }, 35529a0570SDaniel Grumberg "module": { 36529a0570SDaniel Grumberg "name": "Macros", 37529a0570SDaniel Grumberg "platform": { 38529a0570SDaniel Grumberg "architecture": "arm64", 39529a0570SDaniel Grumberg "operatingSystem": { 40529a0570SDaniel Grumberg "minimumVersion": { 41529a0570SDaniel Grumberg "major": 11, 42529a0570SDaniel Grumberg "minor": 0, 43529a0570SDaniel Grumberg "patch": 0 44529a0570SDaniel Grumberg }, 45529a0570SDaniel Grumberg "name": "macosx" 46529a0570SDaniel Grumberg }, 47529a0570SDaniel Grumberg "vendor": "apple" 48529a0570SDaniel Grumberg } 49529a0570SDaniel Grumberg }, 5028d79314SDaniel Grumberg "relationships": [], 51529a0570SDaniel Grumberg "symbols": [ 52529a0570SDaniel Grumberg { 5328d79314SDaniel Grumberg "accessLevel": "public", 54529a0570SDaniel Grumberg "declarationFragments": [ 55529a0570SDaniel Grumberg { 56529a0570SDaniel Grumberg "kind": "typeIdentifier", 57529a0570SDaniel Grumberg "preciseIdentifier": "c:v", 58529a0570SDaniel Grumberg "spelling": "void" 59529a0570SDaniel Grumberg }, 60529a0570SDaniel Grumberg { 61529a0570SDaniel Grumberg "kind": "text", 62529a0570SDaniel Grumberg "spelling": " " 63529a0570SDaniel Grumberg }, 64529a0570SDaniel Grumberg { 65529a0570SDaniel Grumberg "kind": "identifier", 66529a0570SDaniel Grumberg "spelling": "foo" 67529a0570SDaniel Grumberg }, 68529a0570SDaniel Grumberg { 69529a0570SDaniel Grumberg "kind": "text", 7014805dcbSNagaChaitanya Vellanki "spelling": "();" 71529a0570SDaniel Grumberg } 72529a0570SDaniel Grumberg ], 7328d79314SDaniel Grumberg "functionSignature": { 7428d79314SDaniel Grumberg "returns": [ 7528d79314SDaniel Grumberg { 7628d79314SDaniel Grumberg "kind": "typeIdentifier", 7728d79314SDaniel Grumberg "preciseIdentifier": "c:v", 7828d79314SDaniel Grumberg "spelling": "void" 7928d79314SDaniel Grumberg } 8028d79314SDaniel Grumberg ] 8128d79314SDaniel Grumberg }, 82529a0570SDaniel Grumberg "identifier": { 83529a0570SDaniel Grumberg "interfaceLanguage": "objective-c", 84529a0570SDaniel Grumberg "precise": "c:@F@foo" 85529a0570SDaniel Grumberg }, 86529a0570SDaniel Grumberg "kind": { 87529a0570SDaniel Grumberg "displayName": "Function", 88529a0570SDaniel Grumberg "identifier": "objective-c.func" 89529a0570SDaniel Grumberg }, 90529a0570SDaniel Grumberg "location": { 9128d79314SDaniel Grumberg "position": { 9263537872SQuietMisdreavus "character": 0, 9363537872SQuietMisdreavus "line": 2 9428d79314SDaniel Grumberg }, 95529a0570SDaniel Grumberg "uri": "file://INPUT_DIR/input.h" 96529a0570SDaniel Grumberg }, 97529a0570SDaniel Grumberg "names": { 9880ae3665SDaniel Grumberg "navigator": [ 9980ae3665SDaniel Grumberg { 10080ae3665SDaniel Grumberg "kind": "identifier", 10180ae3665SDaniel Grumberg "spelling": "foo" 10280ae3665SDaniel Grumberg } 10380ae3665SDaniel Grumberg ], 104529a0570SDaniel Grumberg "subHeading": [ 105529a0570SDaniel Grumberg { 106529a0570SDaniel Grumberg "kind": "identifier", 107529a0570SDaniel Grumberg "spelling": "foo" 108529a0570SDaniel Grumberg } 109529a0570SDaniel Grumberg ], 110529a0570SDaniel Grumberg "title": "foo" 111529a0570SDaniel Grumberg }, 11228d79314SDaniel Grumberg "pathComponents": [ 11328d79314SDaniel Grumberg "foo" 114529a0570SDaniel Grumberg ] 115529a0570SDaniel Grumberg }, 116529a0570SDaniel Grumberg { 11728d79314SDaniel Grumberg "accessLevel": "public", 118529a0570SDaniel Grumberg "declarationFragments": [ 119529a0570SDaniel Grumberg { 120529a0570SDaniel Grumberg "kind": "typeIdentifier", 121529a0570SDaniel Grumberg "preciseIdentifier": "c:v", 122529a0570SDaniel Grumberg "spelling": "void" 123529a0570SDaniel Grumberg }, 124529a0570SDaniel Grumberg { 125529a0570SDaniel Grumberg "kind": "text", 126529a0570SDaniel Grumberg "spelling": " " 127529a0570SDaniel Grumberg }, 128529a0570SDaniel Grumberg { 129529a0570SDaniel Grumberg "kind": "identifier", 130529a0570SDaniel Grumberg "spelling": "bar" 131529a0570SDaniel Grumberg }, 132529a0570SDaniel Grumberg { 133529a0570SDaniel Grumberg "kind": "text", 134529a0570SDaniel Grumberg "spelling": "(" 135529a0570SDaniel Grumberg }, 136529a0570SDaniel Grumberg { 137529a0570SDaniel Grumberg "kind": "keyword", 138529a0570SDaniel Grumberg "spelling": "const" 139529a0570SDaniel Grumberg }, 140529a0570SDaniel Grumberg { 141529a0570SDaniel Grumberg "kind": "text", 142529a0570SDaniel Grumberg "spelling": " " 143529a0570SDaniel Grumberg }, 144529a0570SDaniel Grumberg { 145529a0570SDaniel Grumberg "kind": "typeIdentifier", 146529a0570SDaniel Grumberg "preciseIdentifier": "c:I", 147529a0570SDaniel Grumberg "spelling": "int" 148529a0570SDaniel Grumberg }, 149529a0570SDaniel Grumberg { 150529a0570SDaniel Grumberg "kind": "text", 151529a0570SDaniel Grumberg "spelling": " * " 152529a0570SDaniel Grumberg }, 153529a0570SDaniel Grumberg { 154529a0570SDaniel Grumberg "kind": "internalParam", 155529a0570SDaniel Grumberg "spelling": "" 156529a0570SDaniel Grumberg }, 157529a0570SDaniel Grumberg { 158529a0570SDaniel Grumberg "kind": "text", 159529a0570SDaniel Grumberg "spelling": ", " 160529a0570SDaniel Grumberg }, 161529a0570SDaniel Grumberg { 162529a0570SDaniel Grumberg "kind": "typeIdentifier", 163529a0570SDaniel Grumberg "preciseIdentifier": "c:i", 164529a0570SDaniel Grumberg "spelling": "unsigned int" 165529a0570SDaniel Grumberg }, 166529a0570SDaniel Grumberg { 167529a0570SDaniel Grumberg "kind": "text", 168529a0570SDaniel Grumberg "spelling": " " 169529a0570SDaniel Grumberg }, 170529a0570SDaniel Grumberg { 171529a0570SDaniel Grumberg "kind": "internalParam", 172529a0570SDaniel Grumberg "spelling": "" 173529a0570SDaniel Grumberg }, 174529a0570SDaniel Grumberg { 175529a0570SDaniel Grumberg "kind": "text", 17614805dcbSNagaChaitanya Vellanki "spelling": ");" 177529a0570SDaniel Grumberg } 178529a0570SDaniel Grumberg ], 17928d79314SDaniel Grumberg "functionSignature": { 180529a0570SDaniel Grumberg "parameters": [ 181529a0570SDaniel Grumberg { 182529a0570SDaniel Grumberg "declarationFragments": [ 183529a0570SDaniel Grumberg { 184529a0570SDaniel Grumberg "kind": "keyword", 185529a0570SDaniel Grumberg "spelling": "const" 186529a0570SDaniel Grumberg }, 187529a0570SDaniel Grumberg { 188529a0570SDaniel Grumberg "kind": "text", 189529a0570SDaniel Grumberg "spelling": " " 190529a0570SDaniel Grumberg }, 191529a0570SDaniel Grumberg { 192529a0570SDaniel Grumberg "kind": "typeIdentifier", 193529a0570SDaniel Grumberg "preciseIdentifier": "c:I", 194529a0570SDaniel Grumberg "spelling": "int" 195529a0570SDaniel Grumberg }, 196529a0570SDaniel Grumberg { 197529a0570SDaniel Grumberg "kind": "text", 198529a0570SDaniel Grumberg "spelling": " * " 199529a0570SDaniel Grumberg }, 200529a0570SDaniel Grumberg { 201529a0570SDaniel Grumberg "kind": "internalParam", 202529a0570SDaniel Grumberg "spelling": "" 203529a0570SDaniel Grumberg } 204529a0570SDaniel Grumberg ], 205529a0570SDaniel Grumberg "name": "" 206529a0570SDaniel Grumberg }, 207529a0570SDaniel Grumberg { 208529a0570SDaniel Grumberg "declarationFragments": [ 209529a0570SDaniel Grumberg { 210529a0570SDaniel Grumberg "kind": "typeIdentifier", 211529a0570SDaniel Grumberg "preciseIdentifier": "c:i", 212529a0570SDaniel Grumberg "spelling": "unsigned int" 213529a0570SDaniel Grumberg }, 214529a0570SDaniel Grumberg { 215529a0570SDaniel Grumberg "kind": "text", 216529a0570SDaniel Grumberg "spelling": " " 217529a0570SDaniel Grumberg }, 218529a0570SDaniel Grumberg { 219529a0570SDaniel Grumberg "kind": "internalParam", 220529a0570SDaniel Grumberg "spelling": "" 221529a0570SDaniel Grumberg } 222529a0570SDaniel Grumberg ], 223529a0570SDaniel Grumberg "name": "" 224529a0570SDaniel Grumberg } 225529a0570SDaniel Grumberg ], 226529a0570SDaniel Grumberg "returns": [ 227529a0570SDaniel Grumberg { 228529a0570SDaniel Grumberg "kind": "typeIdentifier", 229529a0570SDaniel Grumberg "preciseIdentifier": "c:v", 230529a0570SDaniel Grumberg "spelling": "void" 231529a0570SDaniel Grumberg } 232529a0570SDaniel Grumberg ] 23328d79314SDaniel Grumberg }, 23428d79314SDaniel Grumberg "identifier": { 23528d79314SDaniel Grumberg "interfaceLanguage": "objective-c", 23628d79314SDaniel Grumberg "precise": "c:@F@bar" 23728d79314SDaniel Grumberg }, 23828d79314SDaniel Grumberg "kind": { 23928d79314SDaniel Grumberg "displayName": "Function", 24028d79314SDaniel Grumberg "identifier": "objective-c.func" 24128d79314SDaniel Grumberg }, 24228d79314SDaniel Grumberg "location": { 24328d79314SDaniel Grumberg "position": { 24463537872SQuietMisdreavus "character": 0, 24563537872SQuietMisdreavus "line": 3 24628d79314SDaniel Grumberg }, 24728d79314SDaniel Grumberg "uri": "file://INPUT_DIR/input.h" 24828d79314SDaniel Grumberg }, 24928d79314SDaniel Grumberg "names": { 25080ae3665SDaniel Grumberg "navigator": [ 25180ae3665SDaniel Grumberg { 25280ae3665SDaniel Grumberg "kind": "identifier", 25380ae3665SDaniel Grumberg "spelling": "bar" 25480ae3665SDaniel Grumberg } 25580ae3665SDaniel Grumberg ], 25628d79314SDaniel Grumberg "subHeading": [ 25728d79314SDaniel Grumberg { 25828d79314SDaniel Grumberg "kind": "identifier", 25928d79314SDaniel Grumberg "spelling": "bar" 260529a0570SDaniel Grumberg } 26128d79314SDaniel Grumberg ], 26228d79314SDaniel Grumberg "title": "bar" 26328d79314SDaniel Grumberg }, 26428d79314SDaniel Grumberg "pathComponents": [ 26528d79314SDaniel Grumberg "bar" 26628d79314SDaniel Grumberg ] 267529a0570SDaniel Grumberg }, 268529a0570SDaniel Grumberg { 26928d79314SDaniel Grumberg "accessLevel": "public", 270529a0570SDaniel Grumberg "declarationFragments": [ 271529a0570SDaniel Grumberg { 272529a0570SDaniel Grumberg "kind": "keyword", 273529a0570SDaniel Grumberg "spelling": "#define" 274529a0570SDaniel Grumberg }, 275529a0570SDaniel Grumberg { 276529a0570SDaniel Grumberg "kind": "text", 277529a0570SDaniel Grumberg "spelling": " " 278529a0570SDaniel Grumberg }, 279529a0570SDaniel Grumberg { 280529a0570SDaniel Grumberg "kind": "identifier", 281529a0570SDaniel Grumberg "spelling": "HELLO" 282529a0570SDaniel Grumberg } 283529a0570SDaniel Grumberg ], 284529a0570SDaniel Grumberg "identifier": { 285529a0570SDaniel Grumberg "interfaceLanguage": "objective-c", 286529a0570SDaniel Grumberg "precise": "c:input.h@8@macro@HELLO" 287529a0570SDaniel Grumberg }, 288529a0570SDaniel Grumberg "kind": { 289529a0570SDaniel Grumberg "displayName": "Macro", 290529a0570SDaniel Grumberg "identifier": "objective-c.macro" 291529a0570SDaniel Grumberg }, 292529a0570SDaniel Grumberg "location": { 29328d79314SDaniel Grumberg "position": { 29463537872SQuietMisdreavus "character": 8, 29563537872SQuietMisdreavus "line": 0 29628d79314SDaniel Grumberg }, 297529a0570SDaniel Grumberg "uri": "file://INPUT_DIR/input.h" 298529a0570SDaniel Grumberg }, 299529a0570SDaniel Grumberg "names": { 30080ae3665SDaniel Grumberg "navigator": [ 30180ae3665SDaniel Grumberg { 30280ae3665SDaniel Grumberg "kind": "identifier", 30380ae3665SDaniel Grumberg "spelling": "HELLO" 30480ae3665SDaniel Grumberg } 30580ae3665SDaniel Grumberg ], 306529a0570SDaniel Grumberg "subHeading": [ 307529a0570SDaniel Grumberg { 308529a0570SDaniel Grumberg "kind": "identifier", 309529a0570SDaniel Grumberg "spelling": "HELLO" 310529a0570SDaniel Grumberg } 311529a0570SDaniel Grumberg ], 312529a0570SDaniel Grumberg "title": "HELLO" 31328d79314SDaniel Grumberg }, 31428d79314SDaniel Grumberg "pathComponents": [ 31528d79314SDaniel Grumberg "HELLO" 31628d79314SDaniel Grumberg ] 317529a0570SDaniel Grumberg } 318529a0570SDaniel Grumberg ] 319529a0570SDaniel Grumberg } 320