[Concepts] Fix ast dump for immediately declared constraint.

Reviewed By: nridge

Differential Revision: https://reviews.llvm.org/D84461
This commit is contained in:
Haojian Wu 2020-07-28 11:59:49 +02:00
parent 5ee07dc53f
commit c0bd9fa137
2 changed files with 20 additions and 1 deletions

View File

@ -1994,7 +1994,7 @@ void TextNodeDumper::VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) {
dumpBareDeclRef(TC->getFoundDecl());
OS << ")";
}
Visit(TC->getImmediatelyDeclaredConstraint());
AddChild([=] { Visit(TC->getImmediatelyDeclaredConstraint()); });
} else if (D->wasDeclaredWithTypename())
OS << " typename";
else

View File

@ -0,0 +1,19 @@
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++2a -ast-dump -ast-dump-filter Foo %s | FileCheck -strict-whitespace %s
// Test with serialization:
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown -emit-pch -o %t %s
// RUN: %clang_cc1 -x c++ -std=c++20 -triple x86_64-unknown-unknown -include-pch %t \
// RUN: -ast-dump-all -ast-dump-filter Foo /dev/null \
// RUN: | FileCheck --strict-whitespace %s
template <typename T, typename U>
concept binary_concept = true;
template <typename T>
struct Foo {
// CHECK: TemplateTypeParmDecl {{.*}} referenced Concept {{.*}} 'binary_concept'
// CHECK-NEXT: |-ConceptSpecializationExpr {{.*}} 'bool'
// CHECK-NEXT: `-TemplateArgument {{.*}} type 'int'
template <binary_concept<int> R>
Foo(R);
};