Skip to content

Commit 540ce1f

Browse files
committed
Contrary to what the QLDoc says, this predicate was way too large to be
evaluated on the 'quick-lint/quick-lint-js' project. Before: ``` Most expensive predicates for completed query RuleOfTwo.ql: time | evals | max @ iter | predicate ------|-------|--------------|---------- 25m9s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#ffff@8a38e2tm 17m1s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#fffb@0796c497 3.5s | 130 | 116ms @ 3 | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff@926a68j9 3.3s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#fffb_1230#join_rhs@25e9ffj8 1.7s | 3 | 1.7s @ 1 | Element#496c7fc2::ElementBase::toString#0#dispred#ff@fcd81c49 1.3s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#fffb_0132#join_rhs@9c2065t1 1.3s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#ffff_0132#join_rhs@672330eh 1.1s | | | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff_102#join_rhs@f7d5464o 829ms | 336 | 85ms @ 6 | Enclosing#c50c5fbf::exprEnclosingElement#1#ff@e34d9wq1 615ms | | | Expr#ef463c5d::Expr::getType#ff@e265e79q ``` After: ``` Most expensive predicates for completed query RuleOfTwo.ql: time | evals | max @ iter | predicate ------|-------|-------------|---------- 11.8s | | | _#Class#bacd9b46::Class::getADerivedClass#0#dispredPlus#ff_#Declaration#4bfb53be::AccessHolder::getE__#antijoin_rhs#1@fb0627h8 4.8s | | | _#Class#bacd9b46::Class::getADerivedClass#0#dispredPlus#ff_#Declaration#4bfb53be::AccessHolder::getE__#antijoin_rhs#4@c43dbeia 3.8s | | | _#Class#bacd9b46::Class::getADerivedClass#0#dispredPlus#ff_#Declaration#4bfb53be::AccessHolder::getE__#antijoin_rhs#3313e5963 3.4s | 130 | 93ms @ 3 | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff@a0289bfg 1.5s | 3 | 1.5s @ 1 | Element#496c7fc2::ElementBase::toString#0#dispred#ff@fcd81c49 806ms | | | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff_021#join_rhs@cc1b76s7 721ms | 336 | 61ms @ 5 | Enclosing#c50c5fbf::exprEnclosingElement#1#ff@e34d9wq1 489ms | | | Expr#ef463c5d::Expr::getType#ff@e265e79q 337ms | 130 | 62ms @ 5 | Class#bacd9b46::Class::accessOfBaseMemberMulti#ffff@0165b0dr 329ms | | | Variable#7a968d4e::ParameterDeclarationEntry::getAnonymousParameterDescription#0#dispred#ff@0f12bdvq 211ms | | | exprs_10#join_rhs@5481143i ```
1 parent ce937e7 commit 540ce1f

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

cpp/ql/lib/semmle/code/cpp/Declaration.qll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -619,11 +619,10 @@ private class DirectAccessHolder extends Element {
619619
/**
620620
* Like `couldAccessMember` but only contains derivations in which either
621621
* (5.2), (5.3) or (5.4) must be invoked. In other words, the `this`
622-
* parameter is not ignored. This restriction makes it feasible to fully
623-
* enumerate this predicate even on large code bases. We check for 11.4 as
624-
* part of (5.3), since this further limits the number of tuples produced by
625-
* this predicate.
622+
* parameter is not ignored. We check for 11.4 as part of (5.3), since
623+
* this further limits the number of tuples produced by this predicate.
626624
*/
625+
pragma[inline]
627626
predicate thisCouldAccessMember(Class memberClass, AccessSpecifier memberAccess, Class derived) {
628627
// Only (5.4) is recursive, and chains of invocations of (5.4) can always
629628
// be collapsed to one invocation by the transitivity of 11.2/4.

0 commit comments

Comments
 (0)