From 3c1a68ee8f45dbb7361a2abe3808835d8a3b38ec Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Mon, 27 Jan 2020 12:05:48 +0000 Subject: [PATCH] Fix hash-consing of literals. We shouldn't rely on the literal value given in the `literals` table, but use the exact value (where available) instead. --- ql/src/RedundantCode/Clones.qll | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ql/src/RedundantCode/Clones.qll b/ql/src/RedundantCode/Clones.qll index 48650674706..beccbb9d1ec 100644 --- a/ql/src/RedundantCode/Clones.qll +++ b/ql/src/RedundantCode/Clones.qll @@ -50,10 +50,16 @@ class HashableNode extends AstNode { * Gets the value of this AST node, or the empty string if it does not have one. */ string getValue() { - literals(this, result, _) - or - not literals(this, _, _) and - result = "" + // for literals, get the exact value if available + if exists(this.(BasicLit).getExactValue()) + then result = this.(BasicLit).getExactValue() + else + // for identifiers, get the name + if this instanceof Ident + then result = this.(Ident).getName() + else + // for everything else, give up + result = "" } /**