Skip to content

Commit 2bbeb73

Browse files
authored
Merge pull request github#12452 from MathiasVP/inline-this-could-access-member
C++: Inline `thisCouldAccessMember`
2 parents 5500330 + f19f796 commit 2bbeb73

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

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

Lines changed: 6 additions & 5 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.
@@ -665,7 +664,9 @@ private class DirectAccessHolder extends Element {
665664
// bypasses `p`. Then that path must be public, or we are in case 2.
666665
exists(AccessSpecifier public | public.hasName("public") |
667666
exists(Class between, Class p |
668-
between.accessOfBaseMember(memberClass, memberAccess).hasName("protected") and
667+
between
668+
.accessOfBaseMember(pragma[only_bind_into](memberClass), memberAccess)
669+
.hasName("protected") and
669670
this.isFriendOfOrEqualTo(p) and
670671
(
671672
// This is case 1 from above. If `p` derives privately from `between`

0 commit comments

Comments
 (0)