Skip to content

Commit 39f602c

Browse files
committed
Rust: Create injective ids for impl trait type parameters
1 parent bb56b0d commit 39f602c

File tree

3 files changed

+26
-26
lines changed

3 files changed

+26
-26
lines changed

rust/ql/lib/codeql/rust/internal/TypeInference.qll

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -83,41 +83,44 @@ private module Input1 implements InputSig1<Location> {
8383

8484
int getTypeParameterId(TypeParameter tp) {
8585
tp =
86-
rank[result](TypeParameter tp0, int kind, int id |
86+
rank[result](TypeParameter tp0, int kind, int id1, int id2 |
8787
tp0 instanceof ArrayTypeParameter and
8888
kind = 0 and
89-
id = 0
89+
id1 = 0 and
90+
id2 = 0
9091
or
9192
tp0 instanceof RefTypeParameter and
9293
kind = 0 and
93-
id = 1
94+
id1 = 0 and
95+
id2 = 1
9496
or
9597
tp0 instanceof SliceTypeParameter and
9698
kind = 0 and
97-
id = 2
99+
id1 = 0 and
100+
id2 = 2
98101
or
99102
kind = 1 and
100-
id = idOfTypeParameterAstNode(tp0.(DynTraitTypeParameter).getTypeParam())
103+
id1 = 0 and
104+
id2 = idOfTypeParameterAstNode(tp0.(DynTraitTypeParameter).getTypeParam())
101105
or
102106
kind = 2 and
103-
id = idOfTypeParameterAstNode(tp0.(ImplTraitTypeParameter).getTypeParam())
107+
id1 = idOfTypeParameterAstNode(tp0.(ImplTraitTypeParameter).getImplTraitTypeRepr()) and
108+
id2 = idOfTypeParameterAstNode(tp0.(ImplTraitTypeParameter).getTypeParam())
104109
or
105110
kind = 3 and
106-
exists(AstNode node | id = idOfTypeParameterAstNode(node) |
111+
id1 = 0 and
112+
exists(AstNode node | id2 = idOfTypeParameterAstNode(node) |
107113
node = tp0.(TypeParamTypeParameter).getTypeParam() or
108114
node = tp0.(AssociatedTypeTypeParameter).getTypeAlias() or
109115
node = tp0.(SelfTypeParameter).getTrait() or
110116
node = tp0.(ImplTraitTypeTypeParameter).getImplTraitTypeRepr()
111117
)
112118
or
113-
exists(TupleTypeParameter ttp, int maxArity |
114-
maxArity = max(int i | i = any(TupleType tt).getArity()) and
115-
tp0 = ttp and
116-
kind = 4 and
117-
id = ttp.getTupleType().getArity() * maxArity + ttp.getIndex()
118-
)
119+
kind = 4 and
120+
id1 = tp0.(TupleTypeParameter).getTupleType().getArity() and
121+
id2 = tp0.(TupleTypeParameter).getIndex()
119122
|
120-
tp0 order by kind, id
123+
tp0 order by kind, id1, id2
121124
)
122125
}
123126
}

rust/ql/test/library-tests/type-inference/CONSISTENCY/TypeInferenceConsistency.expected

Lines changed: 0 additions & 3 deletions
This file was deleted.

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3372,30 +3372,30 @@ inferType
33723372
| main.rs:1934:78:1936:5 | { ... } | 0(2) | main.rs:1879:5:1879:22 | S3 |
33733373
| main.rs:1934:78:1936:5 | { ... } | 0(2) | main.rs:1934:44:1934:58 | ImplTraitTypeRepr |
33743374
| main.rs:1934:78:1936:5 | { ... } | 0(2).T3 | main.rs:1934:24:1934:31 | T |
3375-
| main.rs:1934:78:1936:5 | { ... } | 0(2).impl(T).impl(T) | main.rs:1934:24:1934:31 | T |
3375+
| main.rs:1934:78:1936:5 | { ... } | 0(2).impl(T) | main.rs:1934:24:1934:31 | T |
33763376
| main.rs:1934:78:1936:5 | { ... } | 1(2) | main.rs:1879:5:1879:22 | S3 |
33773377
| main.rs:1934:78:1936:5 | { ... } | 1(2) | main.rs:1934:61:1934:75 | ImplTraitTypeRepr |
33783378
| main.rs:1934:78:1936:5 | { ... } | 1(2).T3 | main.rs:1934:24:1934:31 | T |
3379-
| main.rs:1934:78:1936:5 | { ... } | 1(2).impl(T).impl(T) | main.rs:1934:24:1934:31 | T |
3379+
| main.rs:1934:78:1936:5 | { ... } | 1(2).impl(T) | main.rs:1934:24:1934:31 | T |
33803380
| main.rs:1935:9:1935:30 | TupleExpr | | file://:0:0:0:0 | (T_2) |
33813381
| main.rs:1935:9:1935:30 | TupleExpr | 0(2) | main.rs:1879:5:1879:22 | S3 |
33823382
| main.rs:1935:9:1935:30 | TupleExpr | 0(2) | main.rs:1934:44:1934:58 | ImplTraitTypeRepr |
33833383
| main.rs:1935:9:1935:30 | TupleExpr | 0(2).T3 | main.rs:1934:24:1934:31 | T |
3384-
| main.rs:1935:9:1935:30 | TupleExpr | 0(2).impl(T).impl(T) | main.rs:1934:24:1934:31 | T |
3384+
| main.rs:1935:9:1935:30 | TupleExpr | 0(2).impl(T) | main.rs:1934:24:1934:31 | T |
33853385
| main.rs:1935:9:1935:30 | TupleExpr | 1(2) | main.rs:1879:5:1879:22 | S3 |
33863386
| main.rs:1935:9:1935:30 | TupleExpr | 1(2) | main.rs:1934:61:1934:75 | ImplTraitTypeRepr |
33873387
| main.rs:1935:9:1935:30 | TupleExpr | 1(2).T3 | main.rs:1934:24:1934:31 | T |
3388-
| main.rs:1935:9:1935:30 | TupleExpr | 1(2).impl(T).impl(T) | main.rs:1934:24:1934:31 | T |
3388+
| main.rs:1935:9:1935:30 | TupleExpr | 1(2).impl(T) | main.rs:1934:24:1934:31 | T |
33893389
| main.rs:1935:10:1935:22 | S3(...) | | main.rs:1879:5:1879:22 | S3 |
33903390
| main.rs:1935:10:1935:22 | S3(...) | | main.rs:1934:44:1934:58 | ImplTraitTypeRepr |
33913391
| main.rs:1935:10:1935:22 | S3(...) | T3 | main.rs:1934:24:1934:31 | T |
3392-
| main.rs:1935:10:1935:22 | S3(...) | impl(T).impl(T) | main.rs:1934:24:1934:31 | T |
3392+
| main.rs:1935:10:1935:22 | S3(...) | impl(T) | main.rs:1934:24:1934:31 | T |
33933393
| main.rs:1935:13:1935:13 | x | | main.rs:1934:24:1934:31 | T |
33943394
| main.rs:1935:13:1935:21 | x.clone() | | main.rs:1934:24:1934:31 | T |
33953395
| main.rs:1935:25:1935:29 | S3(...) | | main.rs:1879:5:1879:22 | S3 |
33963396
| main.rs:1935:25:1935:29 | S3(...) | | main.rs:1934:61:1934:75 | ImplTraitTypeRepr |
33973397
| main.rs:1935:25:1935:29 | S3(...) | T3 | main.rs:1934:24:1934:31 | T |
3398-
| main.rs:1935:25:1935:29 | S3(...) | impl(T).impl(T) | main.rs:1934:24:1934:31 | T |
3398+
| main.rs:1935:25:1935:29 | S3(...) | impl(T) | main.rs:1934:24:1934:31 | T |
33993399
| main.rs:1935:28:1935:28 | x | | main.rs:1934:24:1934:31 | T |
34003400
| main.rs:1938:26:1938:26 | t | | main.rs:1938:29:1938:43 | ImplTraitTypeRepr |
34013401
| main.rs:1938:51:1940:5 | { ... } | | main.rs:1938:23:1938:23 | A |
@@ -3434,11 +3434,11 @@ inferType
34343434
| main.rs:1954:13:1954:13 | g | | main.rs:1876:5:1877:14 | S1 |
34353435
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) |
34363436
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | 0(2) | main.rs:1934:44:1934:58 | ImplTraitTypeRepr |
3437-
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | 0(2).impl(T).impl(T) | main.rs:1876:5:1877:14 | S1 |
3437+
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:1876:5:1877:14 | S1 |
34383438
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | 1(2) | main.rs:1934:61:1934:75 | ImplTraitTypeRepr |
3439-
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | 1(2).impl(T).impl(T) | main.rs:1876:5:1877:14 | S1 |
3439+
| main.rs:1954:17:1954:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:1876:5:1877:14 | S1 |
34403440
| main.rs:1954:17:1954:37 | ... .0 | | main.rs:1934:44:1934:58 | ImplTraitTypeRepr |
3441-
| main.rs:1954:17:1954:37 | ... .0 | impl(T).impl(T) | main.rs:1876:5:1877:14 | S1 |
3441+
| main.rs:1954:17:1954:37 | ... .0 | impl(T) | main.rs:1876:5:1877:14 | S1 |
34423442
| main.rs:1954:17:1954:45 | ... .get_a() | | main.rs:1876:5:1877:14 | S1 |
34433443
| main.rs:1954:33:1954:34 | S1 | | main.rs:1876:5:1877:14 | S1 |
34443444
| main.rs:1965:16:1965:20 | SelfParam | | file://:0:0:0:0 | & |

0 commit comments

Comments
 (0)