mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 11:35:51 -04:00
[clangd] Add C++20 concepts support to TargetFinder
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D73140
This commit is contained in:
parent
c6c5dbc824
commit
cbcd07a481
@ -17,6 +17,7 @@
|
||||
#include "clang/AST/DeclarationName.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/ExprCXX.h"
|
||||
#include "clang/AST/ExprConcepts.h"
|
||||
#include "clang/AST/ExprObjC.h"
|
||||
#include "clang/AST/NestedNameSpecifier.h"
|
||||
#include "clang/AST/PrettyPrinter.h"
|
||||
@ -279,6 +280,9 @@ public:
|
||||
void VisitCallExpr(const CallExpr *CE) {
|
||||
Outer.add(CE->getCalleeDecl(), Flags);
|
||||
}
|
||||
void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *E) {
|
||||
Outer.add(E->getNamedConcept(), Flags);
|
||||
}
|
||||
void VisitDeclRefExpr(const DeclRefExpr *DRE) {
|
||||
const Decl *D = DRE->getDecl();
|
||||
// UsingShadowDecl allows us to record the UsingDecl.
|
||||
|
@ -339,6 +339,24 @@ TEST_F(TargetDeclTest, ClassTemplate) {
|
||||
{"struct Test", Rel::TemplatePattern});
|
||||
}
|
||||
|
||||
TEST_F(TargetDeclTest, Concept) {
|
||||
Code = R"cpp(
|
||||
template <typename T>
|
||||
concept Fooable = requires (T t) { t.foo(); };
|
||||
|
||||
template <typename T> requires [[Fooable]]<T>
|
||||
void bar(T t) {
|
||||
t.foo();
|
||||
}
|
||||
)cpp";
|
||||
Flags.push_back("-std=c++2a");
|
||||
EXPECT_DECLS(
|
||||
"ConceptSpecializationExpr",
|
||||
// FIXME: Should we truncate the pretty-printed form of a concept decl
|
||||
// somewhere?
|
||||
{"template <typename T> concept Fooable = requires (T t) { t.foo(); };"});
|
||||
}
|
||||
|
||||
TEST_F(TargetDeclTest, FunctionTemplate) {
|
||||
Code = R"cpp(
|
||||
// Implicit specialization.
|
||||
|
Loading…
Reference in New Issue
Block a user