Skip to content

Commit bc60d03

Browse files
committed
Rust: Fix bad join in inferAccessType
Before ``` Pipeline standard for TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4@202c46xq was evaluated in 600 iterations totaling 2282ms (delta sizes total: 5827084). 120407742 ~1% {4} r1 = JOIN `TypeInference::CallExprBaseMatchingInput::Access.getTarget/0#dispred#29d66fd1#prev_delta` WITH `TypeInference::CallExprBaseMatchingInput::accessDeclarationPositionMatch/2#6c58c89d` CARTESIAN PRODUCT OUTPUT Lhs.1, Rhs.1, Rhs.0, Lhs.0 6495868 ~109% {4} | JOIN WITH `TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f` ON FIRST 2 OUTPUT Rhs.3, Lhs.2, Lhs.3, Rhs.2 {4} | AND NOT Type::TypeParameter#f85657da(FIRST 1) 3049994 ~10% {4} | SCAN OUTPUT In.2, In.1, In.3, In.0 7891 ~0% {5} r2 = SCAN `TypeInference::CallExprBaseMatching::explicitTypeMatch/5#98ce2c39#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 4445 ~3% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 4445 ~3% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 4445 ~5% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 3553075 ~1% {5} r3 = SCAN `TypeInference::CallExprBaseMatching::directTypeMatch/5#319f8680#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 6860451 ~16% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 6860451 ~19% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 6211129 ~20% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 115218 ~1% {5} r4 = SCAN `TypeInference::CallExprBaseMatching::typeConstraintBaseTypeMatch/5#ebeb4216#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 181668 ~2% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 181668 ~0% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 181668 ~0% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 9447236 ~16% {4} r5 = r1 UNION r2 UNION r3 UNION r4 5902300 ~4% {4} | AND NOT `TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4#prev`(FIRST 4) return r5 ``` Afer ``` Pipeline standard for TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4@061316x0 was evaluated in 600 iterations totaling 1727ms (delta sizes total: 5918371). 1323162 ~0% {2} r1 = SCAN `TypeInference::CallExprBaseMatchingInput::Access.getTarget/0#dispred#29d66fd1#prev_delta` OUTPUT In.1, In.0 5316637 ~152% {4} | JOIN WITH `_Type::TypeParameter#f85657da_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/__#join_rhs#1` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Rhs.2, Rhs.3 7891 ~0% {5} r2 = SCAN `TypeInference::CallExprBaseMatching::explicitTypeMatch/5#98ce2c39#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 4445 ~3% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 4445 ~3% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 4445 ~5% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 3553075 ~1% {5} r3 = SCAN `TypeInference::CallExprBaseMatching::directTypeMatch/5#319f8680#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 6860451 ~16% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 6860451 ~19% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 6211129 ~20% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 115218 ~1% {5} r4 = SCAN `TypeInference::CallExprBaseMatching::typeConstraintBaseTypeMatch/5#ebeb4216#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 181668 ~2% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 181668 ~0% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 181668 ~0% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 11713879 ~62% {4} r5 = r1 UNION r2 UNION r3 UNION r4 6210333 ~10% {4} | AND NOT `TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4#prev`(FIRST 4) return r5 ```
1 parent 8c95664 commit bc60d03

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

shared/typeinference/codeql/typeinference/internal/TypeInference.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,14 +1289,14 @@ module Make1<LocationSig Location, InputSig1<Location> Input1> {
12891289
exists(DeclarationPosition dpos | accessDeclarationPositionMatch(apos, dpos) |
12901290
// A suffix of `path` leads to a type parameter in the target
12911291
exists(Declaration target, TypePath prefix, TypeParameter tp, TypePath suffix |
1292-
tp = target.getDeclaredType(pragma[only_bind_into](dpos), prefix) and
1292+
tp = target.getDeclaredType(dpos, prefix) and
12931293
path = prefix.append(suffix) and
12941294
typeMatch(a, target, suffix, result, tp)
12951295
)
12961296
or
12971297
// `path` corresponds directly to a concrete type in the declaration
12981298
exists(Declaration target |
1299-
result = target.getDeclaredType(pragma[only_bind_into](dpos), path) and
1299+
result = target.getDeclaredType(dpos, path) and
13001300
target = a.getTarget() and
13011301
not result instanceof TypeParameter
13021302
)

0 commit comments

Comments
 (0)