Skip to content
4 changes: 4 additions & 0 deletions go/ql/lib/change-notes/2025-02-26-location-info-changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* The location info for the following classes has been changed slightly to match a location that is in the database: `BasicBlock`, `ControlFlow::EntryNode`, `ControlFlow::ExitNode`, `ControlFlow::ConditionGuardNode`, `IR::ImplicitLiteralElementIndexInstruction`, `IR::EvalImplicitTrueInstruction`, `SsaImplicitDefinition`, `SsaPhiNode`.
3 changes: 1 addition & 2 deletions go/ql/lib/semmle/go/controlflow/BasicBlocks.qll
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,7 @@ class BasicBlock extends TControlFlowNode {
predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
this.getFirstNode().hasLocationInfo(filepath, startline, startcolumn, _, _) and
this.getLastNode().hasLocationInfo(_, _, _, endline, endcolumn)
this.getFirstNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down
4 changes: 1 addition & 3 deletions go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,7 @@ module ControlFlow {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
cond.hasLocationInfo(filepath, _, _, startline, startcolumn) and
endline = startline and
endcolumn = startcolumn
cond.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down
8 changes: 2 additions & 6 deletions go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll
Original file line number Diff line number Diff line change
Expand Up @@ -440,9 +440,7 @@ class EntryNode extends ControlFlow::Node, MkEntryNode {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
root.hasLocationInfo(filepath, startline, startcolumn, _, _) and
endline = startline and
endcolumn = startcolumn
root.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand All @@ -461,9 +459,7 @@ class ExitNode extends ControlFlow::Node, MkExitNode {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
root.hasLocationInfo(filepath, _, _, endline, endcolumn) and
endline = startline and
endcolumn = startcolumn
root.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down
8 changes: 2 additions & 6 deletions go/ql/lib/semmle/go/controlflow/IR.qll
Original file line number Diff line number Diff line change
Expand Up @@ -647,9 +647,7 @@ module IR {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
elt.hasLocationInfo(filepath, startline, startcolumn, _, _) and
endline = startline and
endcolumn = startcolumn
elt.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down Expand Up @@ -1231,9 +1229,7 @@ module IR {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
stmt.hasLocationInfo(filepath, startline, startcolumn, _, _) and
endline = startline and
endcolumn = startcolumn
stmt.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down
8 changes: 2 additions & 6 deletions go/ql/lib/semmle/go/dataflow/SSA.qll
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,7 @@ abstract class SsaImplicitDefinition extends SsaDefinition {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
endline = startline and
endcolumn = startcolumn and
this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, _, _)
this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down Expand Up @@ -296,9 +294,7 @@ class SsaPhiNode extends SsaPseudoDefinition, TPhi {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
endline = startline and
endcolumn = startcolumn and
this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, _, _)
this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

Expand Down
16 changes: 8 additions & 8 deletions go/ql/test/extractor-tests/go1.17/CFG.expected
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ nodes
edges
| conversions.go:0:0:0:0 | entry | conversions.go:3:1:3:15 | skip |
| conversions.go:3:1:3:15 | skip | conversions.go:5:6:5:8 | skip |
| conversions.go:5:1:5:1 | entry | conversions.go:5:10:5:10 | argument corresponding to _ |
| conversions.go:5:1:5:29 | entry | conversions.go:5:10:5:10 | argument corresponding to _ |
| conversions.go:5:1:5:29 | function declaration | conversions.go:7:6:7:9 | skip |
| conversions.go:5:6:5:8 | skip | conversions.go:5:1:5:29 | function declaration |
| conversions.go:5:10:5:10 | argument corresponding to _ | conversions.go:5:10:5:10 | initialization of _ |
| conversions.go:5:10:5:10 | initialization of _ | conversions.go:5:28:5:29 | skip |
| conversions.go:5:28:5:29 | skip | conversions.go:5:29:5:29 | exit |
| conversions.go:7:1:7:1 | entry | conversions.go:8:6:8:6 | skip |
| conversions.go:5:28:5:29 | skip | conversions.go:5:1:5:29 | exit |
| conversions.go:7:1:26:1 | entry | conversions.go:8:6:8:6 | skip |
| conversions.go:7:1:26:1 | function declaration | conversions.go:0:0:0:0 | exit |
| conversions.go:7:6:7:9 | skip | conversions.go:7:1:26:1 | function declaration |
| conversions.go:8:6:8:6 | assignment to a | conversions.go:10:2:10:2 | skip |
Expand All @@ -21,8 +21,8 @@ edges
| conversions.go:10:18:10:18 | a | conversions.go:10:21:10:22 | 10 |
| conversions.go:10:21:10:22 | 10 | conversions.go:10:7:10:23 | call to Add |
| conversions.go:11:2:11:4 | use | conversions.go:11:6:11:6 | b |
| conversions.go:11:2:11:7 | call to use | conversions.go:7:1:26:1 | exit |
| conversions.go:11:2:11:7 | call to use | conversions.go:13:6:13:8 | skip |
| conversions.go:11:2:11:7 | call to use | conversions.go:26:1:26:1 | exit |
| conversions.go:11:6:11:6 | b | conversions.go:11:2:11:7 | call to use |
| conversions.go:13:6:13:8 | assignment to arr | conversions.go:14:2:14:6 | skip |
| conversions.go:13:6:13:8 | skip | conversions.go:13:6:13:8 | zero value for arr |
Expand All @@ -35,12 +35,12 @@ edges
| conversions.go:14:29:14:30 | 20 | conversions.go:14:11:14:31 | call to Slice |
| conversions.go:17:2:17:4 | assignment to ptr | conversions.go:18:2:18:4 | use |
| conversions.go:17:2:17:4 | skip | conversions.go:17:20:17:24 | slice |
| conversions.go:17:9:17:25 | type conversion | conversions.go:7:1:26:1 | exit |
| conversions.go:17:9:17:25 | type conversion | conversions.go:17:2:17:4 | assignment to ptr |
| conversions.go:17:9:17:25 | type conversion | conversions.go:26:1:26:1 | exit |
| conversions.go:17:20:17:24 | slice | conversions.go:17:9:17:25 | type conversion |
| conversions.go:18:2:18:4 | use | conversions.go:18:6:18:8 | ptr |
| conversions.go:18:2:18:9 | call to use | conversions.go:7:1:26:1 | exit |
| conversions.go:18:2:18:9 | call to use | conversions.go:21:2:21:4 | skip |
| conversions.go:18:2:18:9 | call to use | conversions.go:26:1:26:1 | exit |
| conversions.go:18:6:18:8 | ptr | conversions.go:18:2:18:9 | call to use |
| conversions.go:21:2:21:4 | assignment to str | conversions.go:22:2:22:6 | skip |
| conversions.go:21:2:21:4 | skip | conversions.go:21:9:21:18 | "a string" |
Expand All @@ -50,15 +50,15 @@ edges
| conversions.go:22:11:22:21 | type conversion | conversions.go:22:2:22:6 | assignment to bytes |
| conversions.go:22:18:22:20 | str | conversions.go:22:11:22:21 | type conversion |
| conversions.go:23:2:23:4 | use | conversions.go:23:6:23:10 | bytes |
| conversions.go:23:2:23:11 | call to use | conversions.go:7:1:26:1 | exit |
| conversions.go:23:2:23:11 | call to use | conversions.go:24:2:24:6 | skip |
| conversions.go:23:2:23:11 | call to use | conversions.go:26:1:26:1 | exit |
| conversions.go:23:6:23:10 | bytes | conversions.go:23:2:23:11 | call to use |
| conversions.go:24:2:24:6 | assignment to runes | conversions.go:25:2:25:4 | use |
| conversions.go:24:2:24:6 | skip | conversions.go:24:18:24:20 | str |
| conversions.go:24:11:24:21 | type conversion | conversions.go:24:2:24:6 | assignment to runes |
| conversions.go:24:18:24:20 | str | conversions.go:24:11:24:21 | type conversion |
| conversions.go:25:2:25:4 | use | conversions.go:25:6:25:10 | runes |
| conversions.go:25:2:25:11 | call to use | conversions.go:26:1:26:1 | exit |
| conversions.go:25:2:25:11 | call to use | conversions.go:7:1:26:1 | exit |
| conversions.go:25:6:25:10 | runes | conversions.go:25:2:25:11 | call to use |
#select
| |
Loading