From 2bae21cbcd6c44ae8c32582860a503fafd5b0d00 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 11 Jun 2025 10:42:33 +0200 Subject: [PATCH] C++: address review comments --- .../upgrade.properties | 4 ++-- cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll | 8 -------- .../lambdas.ql | 2 +- .../upgrade.properties | 2 +- .../lambdas/syntax/empty_declarator.expected | 16 +++++++++++----- .../lambdas/syntax/empty_declarator.ql | 6 +++--- 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties index ef15d6e09ff..9299dcb085a 100644 --- a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties +++ b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties @@ -1,3 +1,3 @@ -description: add predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively.Add commentMore actionsAdd commentMore actions -compatibility: backwards +description: capture whether a lambda has an explicitly specified parameter list. +compatibility: full lambdas.rel: run lambdas.qlo diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll index 616424bd007..d1836f0ff4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll @@ -53,14 +53,6 @@ class LambdaExpression extends Expr, @lambdaexpr { */ predicate hasParameterList() { lambdas(underlyingElement(this), _, _, true) } - /** - * Holds if the lambda has an empty parameter list - */ - predicate emptyParameterListIsExplicit() { - this.hasParameterList() and - this.getLambdaFunction().getNumberOfParameters() = 0 - } - /** * Gets the function which will be invoked when the resulting object is called. * diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql index a16d5f25d56..f3891442a86 100644 --- a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql @@ -4,4 +4,4 @@ class LambdaExpr extends @lambdaexpr { from LambdaExpr lambda, string default_capture, boolean has_explicit_return_type where lambdas(lambda, default_capture, has_explicit_return_type) -select lambda, default_capture, has_explicit_return_type, false +select lambda, default_capture, has_explicit_return_type, true diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties index ef15d6e09ff..9dc80bb35fc 100644 --- a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties @@ -1,3 +1,3 @@ -description: add predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively.Add commentMore actionsAdd commentMore actions +description: capture whether a lambda has an explicitly specified parameter list. compatibility: backwards lambdas.rel: run lambdas.qlo diff --git a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected index ea2805288ce..1beb3eed3b3 100644 --- a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected +++ b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected @@ -1,5 +1,11 @@ -| parameters.cpp:8:5:8:20 | [...](...){...} | -| parameters.cpp:10:5:10:26 | [...](...){...} | -| parameters.cpp:13:5:13:20 | [...](...){...} | -| parameters.cpp:16:5:18:5 | [...](...){...} | -| parameters.cpp:25:5:25:14 | [...](...){...} | +| parameters.cpp:2:5:2:23 | [...](...){...} | with list | 2 | +| parameters.cpp:4:5:4:22 | [...](...){...} | with list | 1 | +| parameters.cpp:6:5:6:17 | [...](...){...} | with list | 1 | +| parameters.cpp:8:5:8:20 | [...](...){...} | with list | 0 | +| parameters.cpp:10:5:10:26 | [...](...){...} | with list | 0 | +| parameters.cpp:11:5:11:24 | [...](...){...} | without list | 0 | +| parameters.cpp:13:5:13:20 | [...](...){...} | with list | 0 | +| parameters.cpp:16:5:18:5 | [...](...){...} | with list | 0 | +| parameters.cpp:20:5:22:5 | [...](...){...} | without list | 0 | +| parameters.cpp:24:5:24:10 | [...](...){...} | without list | 0 | +| parameters.cpp:25:5:25:14 | [...](...){...} | with list | 0 | diff --git a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql index 81cf1316d2b..ae2043687a0 100644 --- a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql +++ b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql @@ -1,5 +1,5 @@ import cpp -from LambdaExpression e -where e.emptyParameterListIsExplicit() -select e +from LambdaExpression e, string parameterList +where if e.hasParameterList() then parameterList = "with list" else parameterList = "without list" +select e, parameterList, e.getLambdaFunction().getNumberOfParameters()