mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 19:45:40 -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/DeclarationName.h"
|
||||||
#include "clang/AST/Expr.h"
|
#include "clang/AST/Expr.h"
|
||||||
#include "clang/AST/ExprCXX.h"
|
#include "clang/AST/ExprCXX.h"
|
||||||
|
#include "clang/AST/ExprConcepts.h"
|
||||||
#include "clang/AST/ExprObjC.h"
|
#include "clang/AST/ExprObjC.h"
|
||||||
#include "clang/AST/NestedNameSpecifier.h"
|
#include "clang/AST/NestedNameSpecifier.h"
|
||||||
#include "clang/AST/PrettyPrinter.h"
|
#include "clang/AST/PrettyPrinter.h"
|
||||||
@ -279,6 +280,9 @@ public:
|
|||||||
void VisitCallExpr(const CallExpr *CE) {
|
void VisitCallExpr(const CallExpr *CE) {
|
||||||
Outer.add(CE->getCalleeDecl(), Flags);
|
Outer.add(CE->getCalleeDecl(), Flags);
|
||||||
}
|
}
|
||||||
|
void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *E) {
|
||||||
|
Outer.add(E->getNamedConcept(), Flags);
|
||||||
|
}
|
||||||
void VisitDeclRefExpr(const DeclRefExpr *DRE) {
|
void VisitDeclRefExpr(const DeclRefExpr *DRE) {
|
||||||
const Decl *D = DRE->getDecl();
|
const Decl *D = DRE->getDecl();
|
||||||
// UsingShadowDecl allows us to record the UsingDecl.
|
// UsingShadowDecl allows us to record the UsingDecl.
|
||||||
|
@ -339,6 +339,24 @@ TEST_F(TargetDeclTest, ClassTemplate) {
|
|||||||
{"struct Test", Rel::TemplatePattern});
|
{"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) {
|
TEST_F(TargetDeclTest, FunctionTemplate) {
|
||||||
Code = R"cpp(
|
Code = R"cpp(
|
||||||
// Implicit specialization.
|
// Implicit specialization.
|
||||||
|
Loading…
Reference in New Issue
Block a user