From 3700a631a6317b7c5cac09f78f708db1b5cb6e4d Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Tue, 27 Aug 2019 16:19:28 +0200 Subject: [PATCH] C++: Performance fix for existsCompleteWithName --- cpp/ql/src/semmle/code/cpp/internal/ResolveClass.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/semmle/code/cpp/internal/ResolveClass.qll b/cpp/ql/src/semmle/code/cpp/internal/ResolveClass.qll index fb1e3f05da7d..61cd3b2d0560 100644 --- a/cpp/ql/src/semmle/code/cpp/internal/ResolveClass.qll +++ b/cpp/ql/src/semmle/code/cpp/internal/ResolveClass.qll @@ -14,7 +14,12 @@ pragma[noinline] private predicate existsCompleteWithName(string name, @usertype d) { is_complete(d) and name = getTopLevelClassName(d) and - strictcount(@usertype other | is_complete(other) and getTopLevelClassName(other) = name) = 1 + onlyOneCompleteClassExistsWithName(name) +} + +pragma[noinline] +private predicate onlyOneCompleteClassExistsWithName(string name) { + strictcount(@usertype c | is_complete(c) and getTopLevelClassName(c) = name) = 1 } /** Holds if `c` is an incomplete class named `name`. */