llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Willem Kaufmann (WillemKauf)

<details>
<summary>Changes</summary>

Previously, the presence of an explicit parameter list was detected by querying 
`getNumTypeObjects()` from the `Declarator` block of the lambda definition. 
This breaks for lambdas which do not have a parameter list but _do_ have a 
trailing return type; that is, both of

```
[]() -&gt; int { return 0; };
[] -&gt; int { return 0; };
```

would return `true` when inspecting `LambdaExpr::hasExplicitParameters()`.

Fix this by instead querying the `LParenLoc()` from the `Declarator`'s 
`FunctionTypeInfo`. If `isValid() == true`, then an explicit parameter list 
must be present, and if it is `false`, then it is not.

This commit also adds `hasExplicitParameters` as an attribute to a 
`LambdaExpr`'s JSON AST dump. A new test (`ast-dump-lambda-json.cpp`) is also 
added to validate the fix and presence of the new attribute in the output. 
`ast-dump-expr-json.cpp` is also updated to validate the new attribute.

Fixes https://github.com/llvm/llvm-project/issues/168452.

---

Patch is 129.60 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/168558.diff


5 Files Affected:

- (modified) clang/include/clang/AST/JSONNodeDumper.h (+1) 
- (modified) clang/lib/AST/JSONNodeDumper.cpp (+4) 
- (modified) clang/lib/Sema/SemaLambda.cpp (+1-2) 
- (modified) clang/test/AST/ast-dump-expr-json.cpp (+15) 
- (added) clang/test/AST/ast-dump-lambda-json.cpp (+3136) 


``````````diff
diff --git a/clang/include/clang/AST/JSONNodeDumper.h 
b/clang/include/clang/AST/JSONNodeDumper.h
index d364795a05811..cc165dc6a48ac 100644
--- a/clang/include/clang/AST/JSONNodeDumper.h
+++ b/clang/include/clang/AST/JSONNodeDumper.h
@@ -315,6 +315,7 @@ class JSONNodeDumper
   void VisitRequiresExpr(const RequiresExpr *RE);
   void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node);
   void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node);
+  void VisitLambdaExpr(const LambdaExpr *LE);
 
   void VisitObjCEncodeExpr(const ObjCEncodeExpr *OEE);
   void VisitObjCMessageExpr(const ObjCMessageExpr *OME);
diff --git a/clang/lib/AST/JSONNodeDumper.cpp b/clang/lib/AST/JSONNodeDumper.cpp
index 89abf888cbbba..715e1e0989422 100644
--- a/clang/lib/AST/JSONNodeDumper.cpp
+++ b/clang/lib/AST/JSONNodeDumper.cpp
@@ -1607,6 +1607,10 @@ void JSONNodeDumper::VisitCXXDefaultInitExpr(const 
CXXDefaultInitExpr *Node) {
   attributeOnlyIfTrue("hasRewrittenInit", Node->hasRewrittenInit());
 }
 
+void JSONNodeDumper::VisitLambdaExpr(const LambdaExpr *LE) {
+  JOS.attribute("hasExplicitParameters", LE->hasExplicitParameters());
+}
+
 void JSONNodeDumper::VisitCXXDependentScopeMemberExpr(
     const CXXDependentScopeMemberExpr *DSME) {
   JOS.attribute("isArrow", DSME->isArrow());
diff --git a/clang/lib/Sema/SemaLambda.cpp b/clang/lib/Sema/SemaLambda.cpp
index fbc2e7eb30676..2dba17389c3b7 100644
--- a/clang/lib/Sema/SemaLambda.cpp
+++ b/clang/lib/Sema/SemaLambda.cpp
@@ -1439,11 +1439,10 @@ void 
Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
   TypeSourceInfo *MethodTyInfo = getLambdaType(
       *this, Intro, ParamInfo, getCurScope(), TypeLoc, ExplicitResultType);
 
-  LSI->ExplicitParams = ParamInfo.getNumTypeObjects() != 0;
-
   if (ParamInfo.isFunctionDeclarator() != 0 &&
       !FTIHasSingleVoidParameter(ParamInfo.getFunctionTypeInfo())) {
     const auto &FTI = ParamInfo.getFunctionTypeInfo();
+    LSI->ExplicitParams = FTI.getLParenLoc().isValid();
     Params.reserve(Params.size());
     for (unsigned I = 0; I < FTI.NumParams; ++I) {
       auto *Param = cast<ParmVarDecl>(FTI.Params[I].Param);
diff --git a/clang/test/AST/ast-dump-expr-json.cpp 
b/clang/test/AST/ast-dump-expr-json.cpp
index 6293f8cb3fe0e..1415cecd58d36 100644
--- a/clang/test/AST/ast-dump-expr-json.cpp
+++ b/clang/test/AST/ast-dump-expr-json.cpp
@@ -3889,6 +3889,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:                 "qualType": "(lambda at {{.*}}:98:7)"
 // CHECK-NEXT:                },
 // CHECK-NEXT:                "valueCategory": "prvalue",
+// CHECK-NEXT:                "hasExplicitParameters": false,
 // CHECK-NEXT:                "inner": [
 // CHECK-NEXT:                 {
 // CHECK-NEXT:                  "id": "0x{{.*}}",
@@ -4098,6 +4099,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:                 "qualType": "(lambda at {{.*}}:99:7)"
 // CHECK-NEXT:                },
 // CHECK-NEXT:                "valueCategory": "prvalue",
+// CHECK-NEXT:                "hasExplicitParameters": false,
 // CHECK-NEXT:                "inner": [
 // CHECK-NEXT:                 {
 // CHECK-NEXT:                  "id": "0x{{.*}}",
@@ -4413,6 +4415,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:105:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": true,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -4615,6 +4618,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:106:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": true,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -4871,6 +4875,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:107:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -5088,6 +5093,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:108:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -5234,6 +5240,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:109:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -5476,6 +5483,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:110:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -5622,6 +5630,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:111:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -5864,6 +5873,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:112:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -6425,6 +6435,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:113:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": false,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -6688,6 +6699,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:114:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": true,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -6892,6 +6904,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:115:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": true,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -7094,6 +7107,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:116:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": true,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -7296,6 +7310,7 @@ void TestNonADLCall3() {
 // CHECK-NEXT:         "qualType": "(lambda at {{.*}}:117:3)"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "prvalue",
+// CHECK-NEXT:        "hasExplicitParameters": true,
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
diff --git a/clang/test/AST/ast-dump-lambda-json.cpp 
b/clang/test/AST/ast-dump-lambda-json.cpp
new file mode 100644
index 0000000000000..b192a429a9dd2
--- /dev/null
+++ b/clang/test/AST/ast-dump-lambda-json.cpp
@@ -0,0 +1,3136 @@
+// RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++23 -ast-dump=json %s | 
FileCheck %s
+
+void Test() {
+  int a;
+  bool b;
+  char c;
+  double d;
+  []() {};
+  [] {};
+  []() -> int { return 0; };
+  [] -> int { return 0; };
+  [a,b,c,d](){};
+  [a]{};
+  [&](){};
+  struct S {
+    void f(){
+      [this] {};
+      [this]() {};
+    }
+  };
+};
+
+// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
+
+
+// CHECK-NOT: {{^}}Dumping
+// CHECK:  "kind": "TranslationUnitDecl",
+// CHECK-NEXT:  "loc": {},
+// CHECK-NEXT:  "range": {
+// CHECK-NEXT:   "begin": {},
+// CHECK-NEXT:   "end": {}
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "TypedefDecl",
+// CHECK-NEXT:    "loc": {},
+// CHECK-NEXT:    "range": {
+// CHECK-NEXT:     "begin": {},
+// CHECK-NEXT:     "end": {}
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "isImplicit": true,
+// CHECK-NEXT:    "name": "__int128_t",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "__int128"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "BuiltinType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "__int128"
+// CHECK-NEXT:      }
+// CHECK-NEXT:     }
+// CHECK-NEXT:    ]
+// CHECK-NEXT:   },
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "TypedefDecl",
+// CHECK-NEXT:    "loc": {},
+// CHECK-NEXT:    "range": {
+// CHECK-NEXT:     "begin": {},
+// CHECK-NEXT:     "end": {}
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "isImplicit": true,
+// CHECK-NEXT:    "name": "__uint128_t",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "unsigned __int128"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "BuiltinType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "unsigned __int128"
+// CHECK-NEXT:      }
+// CHECK-NEXT:     }
+// CHECK-NEXT:    ]
+// CHECK-NEXT:   },
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "TypedefDecl",
+// CHECK-NEXT:    "loc": {},
+// CHECK-NEXT:    "range": {
+// CHECK-NEXT:     "begin": {},
+// CHECK-NEXT:     "end": {}
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "isImplicit": true,
+// CHECK-NEXT:    "name": "__NSConstantString",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "__NSConstantString_tag"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "RecordType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "__NSConstantString_tag"
+// CHECK-NEXT:      },
+// CHECK-NEXT:      "decl": {
+// CHECK-NEXT:       "id": "0x{{.*}}",
+// CHECK-NEXT:       "kind": "CXXRecordDecl",
+// CHECK-NEXT:       "name": "__NSConstantString_tag"
+// CHECK-NEXT:      }
+// CHECK-NEXT:     }
+// CHECK-NEXT:    ]
+// CHECK-NEXT:   },
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "TypedefDecl",
+// CHECK-NEXT:    "loc": {},
+// CHECK-NEXT:    "range": {
+// CHECK-NEXT:     "begin": {},
+// CHECK-NEXT:     "end": {}
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "isImplicit": true,
+// CHECK-NEXT:    "name": "__builtin_ms_va_list",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "char *"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "PointerType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "char *"
+// CHECK-NEXT:      },
+// CHECK-NEXT:      "inner": [
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "BuiltinType",
+// CHECK-NEXT:        "type": {
+// CHECK-NEXT:         "qualType": "char"
+// CHECK-NEXT:        }
+// CHECK-NEXT:       }
+// CHECK-NEXT:      ]
+// CHECK-NEXT:     }
+// CHECK-NEXT:    ]
+// CHECK-NEXT:   },
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "TypedefDecl",
+// CHECK-NEXT:    "loc": {},
+// CHECK-NEXT:    "range": {
+// CHECK-NEXT:     "begin": {},
+// CHECK-NEXT:     "end": {}
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "isImplicit": true,
+// CHECK-NEXT:    "name": "__builtin_va_list",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "__va_list_tag[1]"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "ConstantArrayType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "__va_list_tag[1]"
+// CHECK-NEXT:      },
+// CHECK-NEXT:      "size": 1,
+// CHECK-NEXT:      "inner": [
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "RecordType",
+// CHECK-NEXT:        "type": {
+// CHECK-NEXT:         "qualType": "__va_list_tag"
+// CHECK-NEXT:        },
+// CHECK-NEXT:        "decl": {
+// CHECK-NEXT:         "id": "0x{{.*}}",
+// CHECK-NEXT:         "kind": "CXXRecordDecl",
+// CHECK-NEXT:         "name": "__va_list_tag"
+// CHECK-NEXT:        }
+// CHECK-NEXT:       }
+// CHECK-NEXT:      ]
+// CHECK-NEXT:     }
+// CHECK-NEXT:    ]
+// CHECK-NEXT:   },
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "FunctionDecl",
+// CHECK-NEXT:    "loc": {
+// CHECK-NEXT:     "offset": 93,
+// CHECK-NEXT:     "file": "{{.*}}",
+// CHECK-NEXT:     "line": 3,
+// CHECK-NEXT:     "col": 6,
+// CHECK-NEXT:     "tokLen": 4
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "range": {
+// CHECK-NEXT:     "begin": {
+// CHECK-NEXT:      "offset": 88,
+// CHECK-NEXT:      "col": 1,
+// CHECK-NEXT:      "tokLen": 4
+// CHECK-NEXT:     },
+// CHECK-NEXT:     "end": {
+// CHECK-NEXT:      "offset": 330,
+// CHECK-NEXT:      "line": 21,
+// CHECK-NEXT:      "col": 1,
+// CHECK-NEXT:      "tokLen": 1
+// CHECK-NEXT:     }
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "name": "Test",
+// CHECK-NEXT:    "mangledName": "_Z4Testv",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "void ()"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "CompoundStmt",
+// CHECK-NEXT:      "range": {
+// CHECK-NEXT:       "begin": {
+// CHECK-NEXT:        "offset": 100,
+// CHECK-NEXT:        "line": 3,
+// CHECK-NEXT:        "col": 13,
+// CHECK-NEXT:        "tokLen": 1
+// CHECK-NEXT:       },
+// CHECK-NEXT:       "end": {
+// CHECK-NEXT:        "offset": 330,
+// CHECK-NEXT:        "line": 21,
+// CHECK-NEXT:        "col": 1,
+// CHECK-NEXT:        "tokLen": 1
+// CHECK-NEXT:       }
+// CHECK-NEXT:      },
+// CHECK-NEXT:      "inner": [
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "DeclStmt",
+// CHECK-NEXT:        "range": {
+// CHECK-NEXT:         "begin": {
+// CHECK-NEXT:          "offset": 104,
+// CHECK-NEXT:          "line": 4,
+// CHECK-NEXT:          "col": 3,
+// CHECK-NEXT:          "tokLen": 3
+// CHECK-NEXT:         },
+// CHECK-NEXT:         "end": {
+// CHECK-NEXT:          "offset": 109,
+// CHECK-NEXT:          "col": 8,
+// CHECK-NEXT:          "tokLen": 1
+// CHECK-NEXT:         }
+// CHECK-NEXT:        },
+// CHECK-NEXT:        "inner": [
+// CHECK-NEXT:         {
+// CHECK-NEXT:          "id": "0x{{.*}}",
+// CHECK-NEXT:          "kind": "VarDecl",
+// CHECK-NEXT:          "loc": {
+// CHECK-NEXT:           "offset": 108,
+// CHECK-NEXT:           "col": 7,
+// CHECK-NEXT:           "tokLen": 1
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "range": {
+// CHECK-NEXT:           "begin": {
+// CHECK-NEXT:            "offset": 104,
+// CHECK-NEXT:            "col": 3,
+// CHECK-NEXT:            "tokLen": 3
+// CHECK-NEXT:           },
+// CHECK-NEXT:           "end": {
+// CHECK-NEXT:            "offset": 108,
+// CHECK-NEXT:            "col": 7,
+// CHECK-NEXT:            "tokLen": 1
+// CHECK-NEXT:           }
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "isUsed": true,
+// CHECK-NEXT:          "name": "a",
+// CHECK-NEXT:          "type": {
+// CHECK-NEXT:           "qualType": "int"
+// CHECK-NEXT:          }
+// CHECK-NEXT:         }
+// CHECK-NEXT:        ]
+// CHECK-NEXT:       },
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "DeclStmt",
+// CHECK-NEXT:        "range": {
+// CHECK-NEXT:         "begin": {
+// CHECK-NEXT:          "offset": 113,
+// CHECK-NEXT:          "line": 5,
+// CHECK-NEXT:          "col": 3,
+// CHECK-NEXT:          "tokLen": 4
+// CHECK-NEXT:         },
+// CHECK-NEXT:         "end": {
+// CHECK-NEXT:          "offset": 119,
+// CHECK-NEXT:          "col": 9,
+// CHECK-NEXT:          "tokLen": 1
+// CHECK-NEXT:         }
+// CHECK-NEXT:        },
+// CHECK-NEXT:        "inner": [
+// CHECK-NEXT:         {
+// CHECK-NEXT:          "id": "0x{{.*}}",
+// CHECK-NEXT:          "kind": "VarDecl",
+// CHECK-NEXT:          "loc": {
+// CHECK-NEXT:           "offset": 118,
+// CHECK-NEXT:           "col": 8,
+// CHECK-NEXT:           "tokLen": 1
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "range": {
+// CHECK-NEXT:           "begin": {
+// CHECK-NEXT:            "offset": 113,
+// CHECK-NEXT:            "col": 3,
+// CHECK-NEXT:            "tokLen": 4
+// CHECK-NEXT:           },
+// CHECK-NEXT:           "end": {
+// CHECK-NEXT:            "offset": 118,
+// CHECK-NEXT:            "col": 8,
+// CHECK-NEXT:            "tokLen": 1
+// CHECK-NEXT:           }
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "isUsed": true,
+// CHECK-NEXT:          "name": "b",
+// CHECK-NEXT:          "type": {
+// CHECK-NEXT:           "qualType": "bool"
+// CHECK-NEXT:          }
+// CHECK-NEXT:         }
+// CHECK-NEXT:        ]
+// CHECK-NEXT:       },
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "DeclStmt",
+// CHECK-NEXT:        "range": {
+// CHECK-NEXT:         "begin": {
+// CHECK-NEXT:          "offset": 123,
+// CHECK-NEXT:          "line": 6,
+// CHECK-NEXT:          "col": 3,
+// CHECK-NEXT:          "tokLen": 4
+// CHECK-NEXT:         },
+// CHECK-NEXT:         "end": {
+// CHECK-NEXT:          "offset": 129,
+// CHECK-NEXT:          "col": 9,
+// CHECK-NEXT:          "tokLen": 1
+// CHECK-NEXT:         }
+// CHECK-NEXT:        },
+// CHECK-NEXT:        "inner": [
+// CHECK-NEXT:         {
+// CHECK-NEXT:          "id": "0x{{.*}}",
+// CHECK-NEXT:          "kind": "VarDecl",
+// CHECK-NEXT:          "loc": {
+// CHECK-NEXT:           "offset": 128,
+// CHECK-NEXT:           "col": 8,
+// CHECK-NEXT:           "tokLen": 1
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "range": {
+// CHECK-NEXT:           "begin": {
+// CHECK-NEXT:            "offset": 123,
+// CHECK-NEXT:            "col": 3,
+// CHECK-NEXT:            "tokLen": 4
+// CHECK-NEXT:           },
+// CHECK-NEXT:           "end": {
+// CHECK-NEXT:            "offset": 128,
+// CHECK-NEXT:            "col": 8,
+// CHECK-NEXT:            "tokLen": 1
+// CHECK-NEXT:           }
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "isUsed": true,
+// CHECK-NEXT:          "name": "c",
+// CHECK-NEXT:          "type": {
+// CHECK-NEXT:           "qualType": "char"
+// CHECK-NEXT:          }
+// CHECK-NEXT:         }
+// CHECK-NEXT:        ]
+// CHECK-NEXT:       },
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "DeclStmt",
+// CHECK-NEXT:        "range": {
+// CHECK-NEXT:         "begin": {
+// CHECK-NEXT:          "offset": 133,
+// CHECK-NEXT:          "line": 7,
+// CHECK-NEXT:          "col": 3,
+// CHECK-NEXT:          "tokLen": 6
+// CHECK-NEXT:         },
+// CHECK-NEXT:         "end": {
+// CHECK-NEXT:          "offset": 141,
+// CHECK-NEXT:          "col": 11,
+// CHECK-NEXT:          "tokLen": 1
+// CHECK-NEXT:         }
+// CHECK-NEXT:        },
+// CHECK-NEXT:        "inner": [
+// CHECK-NEXT:         {
+// CHECK-NEXT:          "id": "0x{{.*}}",
+// CHECK-NEXT:          "kind": "VarDecl",
+// CHECK-NEXT:          "loc": {
+// CHECK-NEXT:           "offset": 140,
+// CHECK-NEXT:           "col": 10,
+// CHECK-NEXT:           "tokLen": 1
+// CHECK-NEXT:          },
+// CHECK-NEXT:          "range": {
+// CHECK-NEXT:           "begin": {
+// CHECK-NEXT:            "offset": 133,
+// CHECK-NEXT:            "col": 3,
+// CHECK-NEXT:            "tokLen": 6
+// CHE...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/168558
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to