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() } /**