[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Haojian Wu via cfe-commits

https://github.com/hokein edited https://github.com/llvm/llvm-project/pull/90466
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Haojian Wu via cfe-commits

https://github.com/hokein closed https://github.com/llvm/llvm-project/pull/90466
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Haojian Wu via cfe-commits


@@ -107,3 +107,17 @@ auto FooFunc(C auto V) -> C decltype(auto) {
 }
 
 }
+
+namespace dump_unreslove_lookup_arguments {

hokein wrote:

ah, good catch. I moved to a generic place, ast-dump-templates.cpp.

https://github.com/llvm/llvm-project/pull/90466
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Haojian Wu via cfe-commits

https://github.com/hokein updated 
https://github.com/llvm/llvm-project/pull/90466

>From b584fab7f2283535d4a04bc55efec6ff508870de Mon Sep 17 00:00:00 2001
From: Haojian Wu 
Date: Mon, 29 Apr 2024 15:04:01 +0200
Subject: [PATCH 1/2] [AST] Dump explicit template arguments for
 UnreslovedLookupExpr.

Having them dump is useful for ad-hoc debugging.
---
 clang/include/clang/AST/ASTNodeTraverser.h|  6 ++
 clang/test/AST/ast-dump-concepts.cpp  | 14 +++
 ...dump-template-json-win32-mangler-crash.cpp | 88 +++
 3 files changed, 108 insertions(+)

diff --git a/clang/include/clang/AST/ASTNodeTraverser.h 
b/clang/include/clang/AST/ASTNodeTraverser.h
index 216dc9eef08b62..cf7493ac37852b 100644
--- a/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/clang/include/clang/AST/ASTNodeTraverser.h
@@ -844,6 +844,12 @@ class ASTNodeTraverser
 }
   }
 
+  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr* E) {
+if (E->hasExplicitTemplateArgs())
+  for (auto Arg : E->template_arguments())
+Visit(Arg.getArgument());
+  }
+
   void VisitRequiresExpr(const RequiresExpr *E) {
 for (auto *D : E->getLocalParameters())
   Visit(D);
diff --git a/clang/test/AST/ast-dump-concepts.cpp 
b/clang/test/AST/ast-dump-concepts.cpp
index 5bb174e3548ed2..01064b76f6d462 100644
--- a/clang/test/AST/ast-dump-concepts.cpp
+++ b/clang/test/AST/ast-dump-concepts.cpp
@@ -107,3 +107,17 @@ auto FooFunc(C auto V) -> C decltype(auto) {
 }
 
 }
+
+namespace dump_unreslove_lookup_arguments {
+template 
+constexpr bool C = true;
+
+template 
+requires(C)
+// CHECK:  ParenExpr {{.*}} '' lvalue
+// CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} '' lvalue (no 
ADL) = 'C'
+// CHECK-NEXT:   `-TemplateArgument type 'T'
+// CHECK-NEXT: `-TemplateTypeParmType {{.*}} 'T'
+// CHECK-NEXT:   `-TemplateTypeParm {{.*}} 'T'
+struct Foo {};
+}
diff --git a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp 
b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
index cf740516db6f4b..5ac55d269dce48 100644
--- a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
+++ b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
@@ -1846,6 +1846,42 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_const_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "const _Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "QualType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "const _Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"qualifiers": "const",
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "id": "0x{{.*}}",
+// CHECK-NEXT:  "kind": "TemplateTypeParmType",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "isDependent": true,
+// CHECK-NEXT:  "isInstantiationDependent": true,
+// CHECK-NEXT:  "depth": 0,
+// CHECK-NEXT:  "index": 0,
+// CHECK-NEXT:  "decl": {
+// CHECK-NEXT:   "id": "0x{{.*}}",
+// CHECK-NEXT:   "kind": "TemplateTypeParmDecl",
+// CHECK-NEXT:   "name": "_Ty"
+// CHECK-NEXT:  }
+// CHECK-NEXT: }
+// CHECK-NEXT:]
+// CHECK-NEXT:   }
+// CHECK-NEXT:  ]
+// CHECK-NEXT: }
 // CHECK-NEXT:]
 // CHECK-NEXT:   }
 // CHECK-NEXT:  ]
@@ -1900,6 +1936,32 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_reference_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "TemplateTypeParmType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "_Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"isDependent": true,
+// CHECK-NEXT:"isInstantiationDependent": true,
+// CHECK-NEXT:"depth": 0,
+// CHECK-NEXT:"index": 0,
+// 

[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Erich Keane via cfe-commits

https://github.com/erichkeane approved this pull request.


https://github.com/llvm/llvm-project/pull/90466
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Haojian Wu via cfe-commits

https://github.com/hokein updated 
https://github.com/llvm/llvm-project/pull/90466

>From b584fab7f2283535d4a04bc55efec6ff508870de Mon Sep 17 00:00:00 2001
From: Haojian Wu 
Date: Mon, 29 Apr 2024 15:04:01 +0200
Subject: [PATCH 1/2] [AST] Dump explicit template arguments for
 UnreslovedLookupExpr.

Having them dump is useful for ad-hoc debugging.
---
 clang/include/clang/AST/ASTNodeTraverser.h|  6 ++
 clang/test/AST/ast-dump-concepts.cpp  | 14 +++
 ...dump-template-json-win32-mangler-crash.cpp | 88 +++
 3 files changed, 108 insertions(+)

diff --git a/clang/include/clang/AST/ASTNodeTraverser.h 
b/clang/include/clang/AST/ASTNodeTraverser.h
index 216dc9eef08b62..cf7493ac37852b 100644
--- a/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/clang/include/clang/AST/ASTNodeTraverser.h
@@ -844,6 +844,12 @@ class ASTNodeTraverser
 }
   }
 
+  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr* E) {
+if (E->hasExplicitTemplateArgs())
+  for (auto Arg : E->template_arguments())
+Visit(Arg.getArgument());
+  }
+
   void VisitRequiresExpr(const RequiresExpr *E) {
 for (auto *D : E->getLocalParameters())
   Visit(D);
diff --git a/clang/test/AST/ast-dump-concepts.cpp 
b/clang/test/AST/ast-dump-concepts.cpp
index 5bb174e3548ed2..01064b76f6d462 100644
--- a/clang/test/AST/ast-dump-concepts.cpp
+++ b/clang/test/AST/ast-dump-concepts.cpp
@@ -107,3 +107,17 @@ auto FooFunc(C auto V) -> C decltype(auto) {
 }
 
 }
+
+namespace dump_unreslove_lookup_arguments {
+template 
+constexpr bool C = true;
+
+template 
+requires(C)
+// CHECK:  ParenExpr {{.*}} '' lvalue
+// CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} '' lvalue (no 
ADL) = 'C'
+// CHECK-NEXT:   `-TemplateArgument type 'T'
+// CHECK-NEXT: `-TemplateTypeParmType {{.*}} 'T'
+// CHECK-NEXT:   `-TemplateTypeParm {{.*}} 'T'
+struct Foo {};
+}
diff --git a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp 
b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
index cf740516db6f4b..5ac55d269dce48 100644
--- a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
+++ b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
@@ -1846,6 +1846,42 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_const_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "const _Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "QualType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "const _Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"qualifiers": "const",
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "id": "0x{{.*}}",
+// CHECK-NEXT:  "kind": "TemplateTypeParmType",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "isDependent": true,
+// CHECK-NEXT:  "isInstantiationDependent": true,
+// CHECK-NEXT:  "depth": 0,
+// CHECK-NEXT:  "index": 0,
+// CHECK-NEXT:  "decl": {
+// CHECK-NEXT:   "id": "0x{{.*}}",
+// CHECK-NEXT:   "kind": "TemplateTypeParmDecl",
+// CHECK-NEXT:   "name": "_Ty"
+// CHECK-NEXT:  }
+// CHECK-NEXT: }
+// CHECK-NEXT:]
+// CHECK-NEXT:   }
+// CHECK-NEXT:  ]
+// CHECK-NEXT: }
 // CHECK-NEXT:]
 // CHECK-NEXT:   }
 // CHECK-NEXT:  ]
@@ -1900,6 +1936,32 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_reference_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "TemplateTypeParmType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "_Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"isDependent": true,
+// CHECK-NEXT:"isInstantiationDependent": true,
+// CHECK-NEXT:"depth": 0,
+// CHECK-NEXT:"index": 0,
+// 

[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Erich Keane via cfe-commits


@@ -107,3 +107,17 @@ auto FooFunc(C auto V) -> C decltype(auto) {
 }
 
 }
+
+namespace dump_unreslove_lookup_arguments {

erichkeane wrote:

This is the wrong file for this, it is meant for `concepts`, which this isn't 
really related to. 

https://github.com/llvm/llvm-project/pull/90466
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread via cfe-commits

github-actions[bot] wrote:




:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:



You can test this locally with the following command:


``bash
git-clang-format --diff 83bc7b57714dc2f6b33c188f2b95a0025468ba51 
b584fab7f2283535d4a04bc55efec6ff508870de -- 
clang/include/clang/AST/ASTNodeTraverser.h clang/test/AST/ast-dump-concepts.cpp 
clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
``





View the diff from clang-format here.


``diff
diff --git a/clang/include/clang/AST/ASTNodeTraverser.h 
b/clang/include/clang/AST/ASTNodeTraverser.h
index cf7493ac37..bf7c204e4a 100644
--- a/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/clang/include/clang/AST/ASTNodeTraverser.h
@@ -844,7 +844,7 @@ public:
 }
   }
 
-  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr* E) {
+  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *E) {
 if (E->hasExplicitTemplateArgs())
   for (auto Arg : E->template_arguments())
 Visit(Arg.getArgument());

``




https://github.com/llvm/llvm-project/pull/90466
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Haojian Wu (hokein)


Changes

Having them dump is useful for ad-hoc debugging (context: 
https://github.com/llvm/llvm-project/issues/90046)

---
Full diff: https://github.com/llvm/llvm-project/pull/90466.diff


3 Files Affected:

- (modified) clang/include/clang/AST/ASTNodeTraverser.h (+6) 
- (modified) clang/test/AST/ast-dump-concepts.cpp (+14) 
- (modified) clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp 
(+88) 


``diff
diff --git a/clang/include/clang/AST/ASTNodeTraverser.h 
b/clang/include/clang/AST/ASTNodeTraverser.h
index 216dc9eef08b62..cf7493ac37852b 100644
--- a/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/clang/include/clang/AST/ASTNodeTraverser.h
@@ -844,6 +844,12 @@ class ASTNodeTraverser
 }
   }
 
+  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr* E) {
+if (E->hasExplicitTemplateArgs())
+  for (auto Arg : E->template_arguments())
+Visit(Arg.getArgument());
+  }
+
   void VisitRequiresExpr(const RequiresExpr *E) {
 for (auto *D : E->getLocalParameters())
   Visit(D);
diff --git a/clang/test/AST/ast-dump-concepts.cpp 
b/clang/test/AST/ast-dump-concepts.cpp
index 5bb174e3548ed2..01064b76f6d462 100644
--- a/clang/test/AST/ast-dump-concepts.cpp
+++ b/clang/test/AST/ast-dump-concepts.cpp
@@ -107,3 +107,17 @@ auto FooFunc(C auto V) -> C decltype(auto) {
 }
 
 }
+
+namespace dump_unreslove_lookup_arguments {
+template 
+constexpr bool C = true;
+
+template 
+requires(C)
+// CHECK:  ParenExpr {{.*}} '' lvalue
+// CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} '' lvalue (no 
ADL) = 'C'
+// CHECK-NEXT:   `-TemplateArgument type 'T'
+// CHECK-NEXT: `-TemplateTypeParmType {{.*}} 'T'
+// CHECK-NEXT:   `-TemplateTypeParm {{.*}} 'T'
+struct Foo {};
+}
diff --git a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp 
b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
index cf740516db6f4b..5ac55d269dce48 100644
--- a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
+++ b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
@@ -1846,6 +1846,42 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_const_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "const _Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "QualType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "const _Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"qualifiers": "const",
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "id": "0x{{.*}}",
+// CHECK-NEXT:  "kind": "TemplateTypeParmType",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "isDependent": true,
+// CHECK-NEXT:  "isInstantiationDependent": true,
+// CHECK-NEXT:  "depth": 0,
+// CHECK-NEXT:  "index": 0,
+// CHECK-NEXT:  "decl": {
+// CHECK-NEXT:   "id": "0x{{.*}}",
+// CHECK-NEXT:   "kind": "TemplateTypeParmDecl",
+// CHECK-NEXT:   "name": "_Ty"
+// CHECK-NEXT:  }
+// CHECK-NEXT: }
+// CHECK-NEXT:]
+// CHECK-NEXT:   }
+// CHECK-NEXT:  ]
+// CHECK-NEXT: }
 // CHECK-NEXT:]
 // CHECK-NEXT:   }
 // CHECK-NEXT:  ]
@@ -1900,6 +1936,32 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_reference_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "TemplateTypeParmType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "_Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"isDependent": true,
+// CHECK-NEXT:"isInstantiationDependent": true,
+// CHECK-NEXT:"depth": 0,
+// CHECK-NEXT:"index": 0,
+// CHECK-NEXT:"decl": {
+// CHECK-NEXT: "id": 

[clang] [AST] Dump explicit template arguments for UnreslovedLookupExpr. (PR #90466)

2024-04-29 Thread Haojian Wu via cfe-commits

https://github.com/hokein created 
https://github.com/llvm/llvm-project/pull/90466

Having them dump is useful for ad-hoc debugging (context: 
https://github.com/llvm/llvm-project/issues/90046)

>From b584fab7f2283535d4a04bc55efec6ff508870de Mon Sep 17 00:00:00 2001
From: Haojian Wu 
Date: Mon, 29 Apr 2024 15:04:01 +0200
Subject: [PATCH] [AST] Dump explicit template arguments for
 UnreslovedLookupExpr.

Having them dump is useful for ad-hoc debugging.
---
 clang/include/clang/AST/ASTNodeTraverser.h|  6 ++
 clang/test/AST/ast-dump-concepts.cpp  | 14 +++
 ...dump-template-json-win32-mangler-crash.cpp | 88 +++
 3 files changed, 108 insertions(+)

diff --git a/clang/include/clang/AST/ASTNodeTraverser.h 
b/clang/include/clang/AST/ASTNodeTraverser.h
index 216dc9eef08b62..cf7493ac37852b 100644
--- a/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/clang/include/clang/AST/ASTNodeTraverser.h
@@ -844,6 +844,12 @@ class ASTNodeTraverser
 }
   }
 
+  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr* E) {
+if (E->hasExplicitTemplateArgs())
+  for (auto Arg : E->template_arguments())
+Visit(Arg.getArgument());
+  }
+
   void VisitRequiresExpr(const RequiresExpr *E) {
 for (auto *D : E->getLocalParameters())
   Visit(D);
diff --git a/clang/test/AST/ast-dump-concepts.cpp 
b/clang/test/AST/ast-dump-concepts.cpp
index 5bb174e3548ed2..01064b76f6d462 100644
--- a/clang/test/AST/ast-dump-concepts.cpp
+++ b/clang/test/AST/ast-dump-concepts.cpp
@@ -107,3 +107,17 @@ auto FooFunc(C auto V) -> C decltype(auto) {
 }
 
 }
+
+namespace dump_unreslove_lookup_arguments {
+template 
+constexpr bool C = true;
+
+template 
+requires(C)
+// CHECK:  ParenExpr {{.*}} '' lvalue
+// CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} '' lvalue (no 
ADL) = 'C'
+// CHECK-NEXT:   `-TemplateArgument type 'T'
+// CHECK-NEXT: `-TemplateTypeParmType {{.*}} 'T'
+// CHECK-NEXT:   `-TemplateTypeParm {{.*}} 'T'
+struct Foo {};
+}
diff --git a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp 
b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
index cf740516db6f4b..5ac55d269dce48 100644
--- a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
+++ b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp
@@ -1846,6 +1846,42 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_const_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "const _Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "QualType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "const _Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"qualifiers": "const",
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "id": "0x{{.*}}",
+// CHECK-NEXT:  "kind": "TemplateTypeParmType",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "isDependent": true,
+// CHECK-NEXT:  "isInstantiationDependent": true,
+// CHECK-NEXT:  "depth": 0,
+// CHECK-NEXT:  "index": 0,
+// CHECK-NEXT:  "decl": {
+// CHECK-NEXT:   "id": "0x{{.*}}",
+// CHECK-NEXT:   "kind": "TemplateTypeParmDecl",
+// CHECK-NEXT:   "name": "_Ty"
+// CHECK-NEXT:  }
+// CHECK-NEXT: }
+// CHECK-NEXT:]
+// CHECK-NEXT:   }
+// CHECK-NEXT:  ]
+// CHECK-NEXT: }
 // CHECK-NEXT:]
 // CHECK-NEXT:   }
 // CHECK-NEXT:  ]
@@ -1900,6 +1936,32 @@ int main()
 // CHECK-NEXT:  "kind": "VarTemplateDecl",
 // CHECK-NEXT:  "name": "is_reference_v"
 // CHECK-NEXT: }
+// CHECK-NEXT:],
+// CHECK-NEXT:"inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT:  "kind": "TemplateArgument",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "_Ty"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:"id": "0x{{.*}}",
+// CHECK-NEXT:"kind": "TemplateTypeParmType",
+// CHECK-NEXT:"type": {
+// CHECK-NEXT: "qualType": "_Ty"
+// CHECK-NEXT:},
+// CHECK-NEXT:"isDependent": true,
+// CHECK-NEXT:"isInstantiationDependent":