diff options
author | Erich Keane <erich.keane@intel.com> | 2019-09-30 19:12:29 +0000 |
---|---|---|
committer | Erich Keane <erich.keane@intel.com> | 2019-09-30 19:12:29 +0000 |
commit | 5c2c60d2fc27e57c56674205faf95ecf01c1d4d9 (patch) | |
tree | ae5e9ff8790dee900b4ec2032fa5acc9f29c3816 /clang/lib/AST/ExprCXX.cpp | |
parent | 3405237f77111946db90d986f2b5d9b9f8cae8a1 (diff) | |
download | bcm5719-llvm-5c2c60d2fc27e57c56674205faf95ecf01c1d4d9.tar.gz bcm5719-llvm-5c2c60d2fc27e57c56674205faf95ecf01c1d4d9.zip |
Teach CallGraph to look into Generic Lambdas.
CallGraph visited LambdaExpr by getting the Call Operator from
CXXRecordDecl (LambdaExpr::getCallOperator calls
CXXRecordDecl::getLambdaCallOperator), which replaced generic lambda
call operators with the non-instantiated FunctionDecl. The result was
that the CallGraph would only pick up non-dependent calls.
This patch does a few things:
1- Extend CXXRecordDecl to have a getDependentLambdaCallOperator, which
will get the FunctionTemplateDecl, rather than immediately getting the
TemplateDecl.
2- Define getLambdaCallOperator and getDependentLambdaCallOperator in
terms of a common function.
3- Extend LambdaExpr with a getDependentCallOperator, which just calls
the above function.
4- Changes CallGraph to handle Generic LambdaExprs.
llvm-svn: 373247
Diffstat (limited to 'clang/lib/AST/ExprCXX.cpp')
-rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 30c28314d5b..1d5fd80d0d4 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -1218,6 +1218,11 @@ CXXMethodDecl *LambdaExpr::getCallOperator() const { return Record->getLambdaCallOperator(); } +FunctionTemplateDecl *LambdaExpr::getDependentCallOperator() const { + CXXRecordDecl *Record = getLambdaClass(); + return Record->getDependentLambdaCallOperator(); +} + TemplateParameterList *LambdaExpr::getTemplateParameterList() const { CXXRecordDecl *Record = getLambdaClass(); return Record->getGenericLambdaTemplateParameterList(); |