From 7c151644f5ed7b60b016614434c4e5ba003cf7e4 Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Tue, 10 Dec 2019 13:43:36 +0100 Subject: [PATCH] C++: Fix getTempVariable join order in IR This join order seems to have broken so it took forever on wireshark/wireshark. --- .../raw/internal/TranslatedElement.qll | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index f118561546b..023ed92fa3a 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -684,9 +684,17 @@ abstract class TranslatedElement extends TTranslatedElement { * Gets the temporary variable generated by this element with tag `tag`. */ final IRTempVariable getTempVariable(TempVariableTag tag) { - result.getAST() = getAST() and - result.getTag() = tag and - hasTempVariable(tag, _) + exists(Locatable ast | + result.getAST() = ast and + result.getTag() = tag and + hasTempVariableAndAST(tag, ast) + ) + } + + pragma[noinline] + private predicate hasTempVariableAndAST(TempVariableTag tag, Locatable ast) { + hasTempVariable(tag, _) and + ast = getAST() } /**