449 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -ast-dump=json %s | FileCheck %s2 3struct S {4 S() {}5 ~S() {}6};7 8void func(const int &);9 10void BindTemp() {11 const S &s = S();12}13 14void MaterializeTemp() {15 const int &i = 1.0;16 17 float f = 1.0f;18 func(f);19}20 21// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py22// using --filters=ExprWithCleanups23 24// CHECK-NOT: {{^}}Dumping25// CHECK: "kind": "ExprWithCleanups",26// CHECK-NEXT: "range": {27// CHECK-NEXT: "begin": {28// CHECK-NEXT: "offset": {{[0-9]+}},29// CHECK-NEXT: "col": 16,30// CHECK-NEXT: "tokLen": 131// CHECK-NEXT: },32// CHECK-NEXT: "end": {33// CHECK-NEXT: "offset": {{[0-9]+}},34// CHECK-NEXT: "col": 18,35// CHECK-NEXT: "tokLen": 136// CHECK-NEXT: }37// CHECK-NEXT: },38// CHECK-NEXT: "type": {39// CHECK-NEXT: "qualType": "const S"40// CHECK-NEXT: },41// CHECK-NEXT: "valueCategory": "lvalue",42// CHECK-NEXT: "cleanupsHaveSideEffects": true,43// CHECK-NEXT: "inner": [44// CHECK-NEXT: {45// CHECK-NEXT: "id": "0x{{.*}}",46// CHECK-NEXT: "kind": "MaterializeTemporaryExpr",47// CHECK-NEXT: "range": {48// CHECK-NEXT: "begin": {49// CHECK-NEXT: "offset": {{[0-9]+}},50// CHECK-NEXT: "col": 16,51// CHECK-NEXT: "tokLen": 152// CHECK-NEXT: },53// CHECK-NEXT: "end": {54// CHECK-NEXT: "offset": {{[0-9]+}},55// CHECK-NEXT: "col": 18,56// CHECK-NEXT: "tokLen": 157// CHECK-NEXT: }58// CHECK-NEXT: },59// CHECK-NEXT: "type": {60// CHECK-NEXT: "qualType": "const S"61// CHECK-NEXT: },62// CHECK-NEXT: "valueCategory": "lvalue",63// CHECK-NEXT: "extendingDecl": {64// CHECK-NEXT: "id": "0x{{.*}}",65// CHECK-NEXT: "kind": "VarDecl",66// CHECK-NEXT: "name": "s",67// CHECK-NEXT: "type": {68// CHECK-NEXT: "qualType": "const S &"69// CHECK-NEXT: }70// CHECK-NEXT: },71// CHECK-NEXT: "storageDuration": "automatic",72// CHECK-NEXT: "boundToLValueRef": true,73// CHECK-NEXT: "inner": [74// CHECK-NEXT: {75// CHECK-NEXT: "id": "0x{{.*}}",76// CHECK-NEXT: "kind": "ImplicitCastExpr",77// CHECK-NEXT: "range": {78// CHECK-NEXT: "begin": {79// CHECK-NEXT: "offset": {{[0-9]+}},80// CHECK-NEXT: "col": 16,81// CHECK-NEXT: "tokLen": 182// CHECK-NEXT: },83// CHECK-NEXT: "end": {84// CHECK-NEXT: "offset": {{[0-9]+}},85// CHECK-NEXT: "col": 18,86// CHECK-NEXT: "tokLen": 187// CHECK-NEXT: }88// CHECK-NEXT: },89// CHECK-NEXT: "type": {90// CHECK-NEXT: "qualType": "const S"91// CHECK-NEXT: },92// CHECK-NEXT: "valueCategory": "prvalue",93// CHECK-NEXT: "castKind": "NoOp",94// CHECK-NEXT: "inner": [95// CHECK-NEXT: {96// CHECK-NEXT: "id": "0x{{.*}}",97// CHECK-NEXT: "kind": "CXXBindTemporaryExpr",98// CHECK-NEXT: "range": {99// CHECK-NEXT: "begin": {100// CHECK-NEXT: "offset": {{[0-9]+}},101// CHECK-NEXT: "col": 16,102// CHECK-NEXT: "tokLen": 1103// CHECK-NEXT: },104// CHECK-NEXT: "end": {105// CHECK-NEXT: "offset": {{[0-9]+}},106// CHECK-NEXT: "col": 18,107// CHECK-NEXT: "tokLen": 1108// CHECK-NEXT: }109// CHECK-NEXT: },110// CHECK-NEXT: "type": {111// CHECK-NEXT: "qualType": "S"112// CHECK-NEXT: },113// CHECK-NEXT: "valueCategory": "prvalue",114// CHECK-NEXT: "temp": "0x{{.*}}",115// CHECK-NEXT: "dtor": {116// CHECK-NEXT: "id": "0x{{.*}}",117// CHECK-NEXT: "kind": "CXXDestructorDecl",118// CHECK-NEXT: "name": "~S",119// CHECK-NEXT: "type": {120// CHECK-NEXT: "qualType": "void () noexcept"121// CHECK-NEXT: }122// CHECK-NEXT: },123// CHECK-NEXT: "inner": [124// CHECK-NEXT: {125// CHECK-NEXT: "id": "0x{{.*}}",126// CHECK-NEXT: "kind": "CXXTemporaryObjectExpr",127// CHECK-NEXT: "range": {128// CHECK-NEXT: "begin": {129// CHECK-NEXT: "offset": {{[0-9]+}},130// CHECK-NEXT: "col": 16,131// CHECK-NEXT: "tokLen": 1132// CHECK-NEXT: },133// CHECK-NEXT: "end": {134// CHECK-NEXT: "offset": {{[0-9]+}},135// CHECK-NEXT: "col": 18,136// CHECK-NEXT: "tokLen": 1137// CHECK-NEXT: }138// CHECK-NEXT: },139// CHECK-NEXT: "type": {140// CHECK-NEXT: "qualType": "S"141// CHECK-NEXT: },142// CHECK-NEXT: "valueCategory": "prvalue",143// CHECK-NEXT: "ctorType": {144// CHECK-NEXT: "qualType": "void ()"145// CHECK-NEXT: },146// CHECK-NEXT: "hadMultipleCandidates": true,147// CHECK-NEXT: "constructionKind": "complete"148// CHECK-NEXT: }149// CHECK-NEXT: ]150// CHECK-NEXT: }151// CHECK-NEXT: ]152// CHECK-NEXT: }153// CHECK-NEXT: ]154// CHECK-NEXT: }155// CHECK-NEXT: ]156// CHECK-NEXT: }157 158// CHECK-NOT: {{^}}Dumping159// CHECK: "kind": "ExprWithCleanups",160// CHECK-NEXT: "range": {161// CHECK-NEXT: "begin": {162// CHECK-NEXT: "offset": {{[0-9]+}},163// CHECK-NEXT: "col": 18,164// CHECK-NEXT: "tokLen": 3165// CHECK-NEXT: },166// CHECK-NEXT: "end": {167// CHECK-NEXT: "offset": {{[0-9]+}},168// CHECK-NEXT: "col": 18,169// CHECK-NEXT: "tokLen": 3170// CHECK-NEXT: }171// CHECK-NEXT: },172// CHECK-NEXT: "type": {173// CHECK-NEXT: "qualType": "const int"174// CHECK-NEXT: },175// CHECK-NEXT: "valueCategory": "lvalue",176// CHECK-NEXT: "inner": [177// CHECK-NEXT: {178// CHECK-NEXT: "id": "0x{{.*}}",179// CHECK-NEXT: "kind": "MaterializeTemporaryExpr",180// CHECK-NEXT: "range": {181// CHECK-NEXT: "begin": {182// CHECK-NEXT: "offset": {{[0-9]+}},183// CHECK-NEXT: "col": 18,184// CHECK-NEXT: "tokLen": 3185// CHECK-NEXT: },186// CHECK-NEXT: "end": {187// CHECK-NEXT: "offset": {{[0-9]+}},188// CHECK-NEXT: "col": 18,189// CHECK-NEXT: "tokLen": 3190// CHECK-NEXT: }191// CHECK-NEXT: },192// CHECK-NEXT: "type": {193// CHECK-NEXT: "qualType": "const int"194// CHECK-NEXT: },195// CHECK-NEXT: "valueCategory": "lvalue",196// CHECK-NEXT: "extendingDecl": {197// CHECK-NEXT: "id": "0x{{.*}}",198// CHECK-NEXT: "kind": "VarDecl",199// CHECK-NEXT: "name": "i",200// CHECK-NEXT: "type": {201// CHECK-NEXT: "qualType": "const int &"202// CHECK-NEXT: }203// CHECK-NEXT: },204// CHECK-NEXT: "storageDuration": "automatic",205// CHECK-NEXT: "boundToLValueRef": true,206// CHECK-NEXT: "inner": [207// CHECK-NEXT: {208// CHECK-NEXT: "id": "0x{{.*}}",209// CHECK-NEXT: "kind": "ImplicitCastExpr",210// CHECK-NEXT: "range": {211// CHECK-NEXT: "begin": {212// CHECK-NEXT: "offset": {{[0-9]+}},213// CHECK-NEXT: "col": 18,214// CHECK-NEXT: "tokLen": 3215// CHECK-NEXT: },216// CHECK-NEXT: "end": {217// CHECK-NEXT: "offset": {{[0-9]+}},218// CHECK-NEXT: "col": 18,219// CHECK-NEXT: "tokLen": 3220// CHECK-NEXT: }221// CHECK-NEXT: },222// CHECK-NEXT: "type": {223// CHECK-NEXT: "qualType": "const int"224// CHECK-NEXT: },225// CHECK-NEXT: "valueCategory": "prvalue",226// CHECK-NEXT: "castKind": "FloatingToIntegral",227// CHECK-NEXT: "inner": [228// CHECK-NEXT: {229// CHECK-NEXT: "id": "0x{{.*}}",230// CHECK-NEXT: "kind": "FloatingLiteral",231// CHECK-NEXT: "range": {232// CHECK-NEXT: "begin": {233// CHECK-NEXT: "offset": {{[0-9]+}},234// CHECK-NEXT: "col": 18,235// CHECK-NEXT: "tokLen": 3236// CHECK-NEXT: },237// CHECK-NEXT: "end": {238// CHECK-NEXT: "offset": {{[0-9]+}},239// CHECK-NEXT: "col": 18,240// CHECK-NEXT: "tokLen": 3241// CHECK-NEXT: }242// CHECK-NEXT: },243// CHECK-NEXT: "type": {244// CHECK-NEXT: "qualType": "double"245// CHECK-NEXT: },246// CHECK-NEXT: "valueCategory": "prvalue",247// CHECK-NEXT: "value": "1"248// CHECK-NEXT: }249// CHECK-NEXT: ]250// CHECK-NEXT: }251// CHECK-NEXT: ]252// CHECK-NEXT: }253// CHECK-NEXT: ]254// CHECK-NEXT: }255 256// CHECK-NOT: {{^}}Dumping257// CHECK: "kind": "ExprWithCleanups",258// CHECK-NEXT: "range": {259// CHECK-NEXT: "begin": {260// CHECK-NEXT: "offset": {{[0-9]+}},261// CHECK-NEXT: "line": 18,262// CHECK-NEXT: "col": 3,263// CHECK-NEXT: "tokLen": 4264// CHECK-NEXT: },265// CHECK-NEXT: "end": {266// CHECK-NEXT: "offset": {{[0-9]+}},267// CHECK-NEXT: "col": 9,268// CHECK-NEXT: "tokLen": 1269// CHECK-NEXT: }270// CHECK-NEXT: },271// CHECK-NEXT: "type": {272// CHECK-NEXT: "qualType": "void"273// CHECK-NEXT: },274// CHECK-NEXT: "valueCategory": "prvalue",275// CHECK-NEXT: "inner": [276// CHECK-NEXT: {277// CHECK-NEXT: "id": "0x{{.*}}",278// CHECK-NEXT: "kind": "CallExpr",279// CHECK-NEXT: "range": {280// CHECK-NEXT: "begin": {281// CHECK-NEXT: "offset": {{[0-9]+}},282// CHECK-NEXT: "col": 3,283// CHECK-NEXT: "tokLen": 4284// CHECK-NEXT: },285// CHECK-NEXT: "end": {286// CHECK-NEXT: "offset": {{[0-9]+}},287// CHECK-NEXT: "col": 9,288// CHECK-NEXT: "tokLen": 1289// CHECK-NEXT: }290// CHECK-NEXT: },291// CHECK-NEXT: "type": {292// CHECK-NEXT: "qualType": "void"293// CHECK-NEXT: },294// CHECK-NEXT: "valueCategory": "prvalue",295// CHECK-NEXT: "inner": [296// CHECK-NEXT: {297// CHECK-NEXT: "id": "0x{{.*}}",298// CHECK-NEXT: "kind": "ImplicitCastExpr",299// CHECK-NEXT: "range": {300// CHECK-NEXT: "begin": {301// CHECK-NEXT: "offset": {{[0-9]+}},302// CHECK-NEXT: "col": 3,303// CHECK-NEXT: "tokLen": 4304// CHECK-NEXT: },305// CHECK-NEXT: "end": {306// CHECK-NEXT: "offset": {{[0-9]+}},307// CHECK-NEXT: "col": 3,308// CHECK-NEXT: "tokLen": 4309// CHECK-NEXT: }310// CHECK-NEXT: },311// CHECK-NEXT: "type": {312// CHECK-NEXT: "qualType": "void (*)(const int &)"313// CHECK-NEXT: },314// CHECK-NEXT: "valueCategory": "prvalue",315// CHECK-NEXT: "castKind": "FunctionToPointerDecay",316// CHECK-NEXT: "inner": [317// CHECK-NEXT: {318// CHECK-NEXT: "id": "0x{{.*}}",319// CHECK-NEXT: "kind": "DeclRefExpr",320// CHECK-NEXT: "range": {321// CHECK-NEXT: "begin": {322// CHECK-NEXT: "offset": {{[0-9]+}},323// CHECK-NEXT: "col": 3,324// CHECK-NEXT: "tokLen": 4325// CHECK-NEXT: },326// CHECK-NEXT: "end": {327// CHECK-NEXT: "offset": {{[0-9]+}},328// CHECK-NEXT: "col": 3,329// CHECK-NEXT: "tokLen": 4330// CHECK-NEXT: }331// CHECK-NEXT: },332// CHECK-NEXT: "type": {333// CHECK-NEXT: "qualType": "void (const int &)"334// CHECK-NEXT: },335// CHECK-NEXT: "valueCategory": "lvalue",336// CHECK-NEXT: "referencedDecl": {337// CHECK-NEXT: "id": "0x{{.*}}",338// CHECK-NEXT: "kind": "FunctionDecl",339// CHECK-NEXT: "name": "func",340// CHECK-NEXT: "type": {341// CHECK-NEXT: "qualType": "void (const int &)"342// CHECK-NEXT: }343// CHECK-NEXT: }344// CHECK-NEXT: }345// CHECK-NEXT: ]346// CHECK-NEXT: },347// CHECK-NEXT: {348// CHECK-NEXT: "id": "0x{{.*}}",349// CHECK-NEXT: "kind": "MaterializeTemporaryExpr",350// CHECK-NEXT: "range": {351// CHECK-NEXT: "begin": {352// CHECK-NEXT: "offset": {{[0-9]+}},353// CHECK-NEXT: "col": 8,354// CHECK-NEXT: "tokLen": 1355// CHECK-NEXT: },356// CHECK-NEXT: "end": {357// CHECK-NEXT: "offset": {{[0-9]+}},358// CHECK-NEXT: "col": 8,359// CHECK-NEXT: "tokLen": 1360// CHECK-NEXT: }361// CHECK-NEXT: },362// CHECK-NEXT: "type": {363// CHECK-NEXT: "qualType": "const int"364// CHECK-NEXT: },365// CHECK-NEXT: "valueCategory": "lvalue",366// CHECK-NEXT: "storageDuration": "full expression",367// CHECK-NEXT: "boundToLValueRef": true,368// CHECK-NEXT: "inner": [369// CHECK-NEXT: {370// CHECK-NEXT: "id": "0x{{.*}}",371// CHECK-NEXT: "kind": "ImplicitCastExpr",372// CHECK-NEXT: "range": {373// CHECK-NEXT: "begin": {374// CHECK-NEXT: "offset": {{[0-9]+}},375// CHECK-NEXT: "col": 8,376// CHECK-NEXT: "tokLen": 1377// CHECK-NEXT: },378// CHECK-NEXT: "end": {379// CHECK-NEXT: "offset": {{[0-9]+}},380// CHECK-NEXT: "col": 8,381// CHECK-NEXT: "tokLen": 1382// CHECK-NEXT: }383// CHECK-NEXT: },384// CHECK-NEXT: "type": {385// CHECK-NEXT: "qualType": "const int"386// CHECK-NEXT: },387// CHECK-NEXT: "valueCategory": "prvalue",388// CHECK-NEXT: "castKind": "FloatingToIntegral",389// CHECK-NEXT: "inner": [390// CHECK-NEXT: {391// CHECK-NEXT: "id": "0x{{.*}}",392// CHECK-NEXT: "kind": "ImplicitCastExpr",393// CHECK-NEXT: "range": {394// CHECK-NEXT: "begin": {395// CHECK-NEXT: "offset": {{[0-9]+}},396// CHECK-NEXT: "col": 8,397// CHECK-NEXT: "tokLen": 1398// CHECK-NEXT: },399// CHECK-NEXT: "end": {400// CHECK-NEXT: "offset": {{[0-9]+}},401// CHECK-NEXT: "col": 8,402// CHECK-NEXT: "tokLen": 1403// CHECK-NEXT: }404// CHECK-NEXT: },405// CHECK-NEXT: "type": {406// CHECK-NEXT: "qualType": "float"407// CHECK-NEXT: },408// CHECK-NEXT: "valueCategory": "prvalue",409// CHECK-NEXT: "castKind": "LValueToRValue",410// CHECK-NEXT: "inner": [411// CHECK-NEXT: {412// CHECK-NEXT: "id": "0x{{.*}}",413// CHECK-NEXT: "kind": "DeclRefExpr",414// CHECK-NEXT: "range": {415// CHECK-NEXT: "begin": {416// CHECK-NEXT: "offset": {{[0-9]+}},417// CHECK-NEXT: "col": 8,418// CHECK-NEXT: "tokLen": 1419// CHECK-NEXT: },420// CHECK-NEXT: "end": {421// CHECK-NEXT: "offset": {{[0-9]+}},422// CHECK-NEXT: "col": 8,423// CHECK-NEXT: "tokLen": 1424// CHECK-NEXT: }425// CHECK-NEXT: },426// CHECK-NEXT: "type": {427// CHECK-NEXT: "qualType": "float"428// CHECK-NEXT: },429// CHECK-NEXT: "valueCategory": "lvalue",430// CHECK-NEXT: "referencedDecl": {431// CHECK-NEXT: "id": "0x{{.*}}",432// CHECK-NEXT: "kind": "VarDecl",433// CHECK-NEXT: "name": "f",434// CHECK-NEXT: "type": {435// CHECK-NEXT: "qualType": "float"436// CHECK-NEXT: }437// CHECK-NEXT: }438// CHECK-NEXT: }439// CHECK-NEXT: ]440// CHECK-NEXT: }441// CHECK-NEXT: ]442// CHECK-NEXT: }443// CHECK-NEXT: ]444// CHECK-NEXT: }445// CHECK-NEXT: ]446// CHECK-NEXT: }447// CHECK-NEXT: ]448// CHECK-NEXT: }449