Skip to content

Commit 767acb8

Browse files
committed
Rust: Fix bad join
Before ``` Evaluated relational algebra for predicate TypeMention::RefTypeReprMention.resolveRootType/0#dispred#091b949a#fb@4bd8a49g with tuple counts: 124419 ~0% {1} r1 = RefTypeRepr::Generated::RefTypeRepr#422893fa AND NOT `RefTypeRepr::Generated::RefTypeRepr.isMut/0#dispred#e2b9988f`(FIRST 1) 6621454761 ~1% {3} | JOIN WITH `Type::DataType.getTypeItem/0#dispred#83467854` CARTESIAN PRODUCT OUTPUT Rhs.0, Lhs.0, Rhs.1 915101745 ~0% {4} | JOIN WITH `project#Type::DataType.getPositionalTypeParameter/1#dispred#3bf49cbe` ON FIRST 1 OUTPUT Lhs.2, _, Lhs.1, Lhs.0 915101745 ~3% {4} | REWRITE WITH Out.1 := "Ref" 124419 ~0% {2} | JOIN WITH `Builtins::BuiltinType.getName/0#dispred#8f62ab0a` ON FIRST 2 OUTPUT Lhs.2, Lhs.3 76728 ~0% {1} r2 = JOIN RefTypeRepr::Generated::RefTypeRepr#422893fa WITH `RefTypeRepr::Generated::RefTypeRepr.isMut/0#dispred#e2b9988f` ON FIRST 1 OUTPUT Lhs.0 4083387432 ~1% {3} | JOIN WITH `Type::DataType.getTypeItem/0#dispred#83467854` CARTESIAN PRODUCT OUTPUT Rhs.0, Lhs.0, Rhs.1 564334440 ~3% {4} | JOIN WITH `project#Type::DataType.getPositionalTypeParameter/1#dispred#3bf49cbe` ON FIRST 1 OUTPUT Lhs.2, _, Lhs.1, Lhs.0 564334440 ~0% {4} | REWRITE WITH Out.1 := "RefMut" 76728 ~2% {2} | JOIN WITH `Builtins::BuiltinType.getName/0#dispred#8f62ab0a` ON FIRST 2 OUTPUT Lhs.2, Lhs.3 201147 ~1% {2} r3 = r1 UNION r2 return r3 ``` After ``` Evaluated relational algebra for predicate TypeMention::RefTypeReprMention.resolveRootType/0#dispred#091b949a#fb@8f12aa2a with tuple counts: 124419 ~0% {1} r1 = RefTypeRepr::Generated::RefTypeRepr#422893fa AND NOT `RefTypeRepr::Generated::RefTypeRepr.isMut/0#dispred#e2b9988f`(FIRST 1) 124419 ~0% {2} | JOIN WITH Type::RefSharedType#090df68e CARTESIAN PRODUCT OUTPUT Rhs.0, Lhs.0 124419 ~0% {2} | JOIN WITH `project#Type::DataType.getPositionalTypeParameter/1#dispred#3bf49cbe` ON FIRST 1 OUTPUT Lhs.1, Lhs.0 76728 ~0% {1} r2 = JOIN RefTypeRepr::Generated::RefTypeRepr#422893fa WITH `RefTypeRepr::Generated::RefTypeRepr.isMut/0#dispred#e2b9988f` ON FIRST 1 OUTPUT Lhs.0 76728 ~0% {2} | JOIN WITH Type::RefMutType#c67a1837 CARTESIAN PRODUCT OUTPUT Rhs.0, Lhs.0 76728 ~2% {2} | JOIN WITH `project#Type::DataType.getPositionalTypeParameter/1#dispred#3bf49cbe` ON FIRST 1 OUTPUT Lhs.1, Lhs.0 201147 ~1% {2} r3 = r1 UNION r2 return r3 ```
1 parent a5d9cb1 commit 767acb8

File tree

1 file changed

+7
-0
lines changed
  • rust/ql/lib/codeql/rust/internal/typeinference

1 file changed

+7
-0
lines changed

rust/ql/lib/codeql/rust/internal/typeinference/Type.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ abstract class Type extends TType {
9696
class TupleType extends StructType {
9797
private int arity;
9898

99+
pragma[nomagic]
99100
TupleType() { arity = this.getTypeItem().(Builtins::TupleType).getArity() }
100101

101102
/** Gets the arity of this tuple type. */
@@ -203,6 +204,7 @@ class TraitType extends Type, TTrait {
203204
* Array types like `[i64; 5]` are modeled as normal generic types.
204205
*/
205206
class ArrayType extends StructType {
207+
pragma[nomagic]
206208
ArrayType() { this.getTypeItem() instanceof Builtins::ArrayType }
207209

208210
override string toString() { result = "[;]" }
@@ -216,12 +218,14 @@ TypeParamTypeParameter getArrayTypeParameter() {
216218
abstract class RefType extends StructType { }
217219

218220
class RefMutType extends RefType {
221+
pragma[nomagic]
219222
RefMutType() { this.getTypeItem() instanceof Builtins::RefMutType }
220223

221224
override string toString() { result = "&mut" }
222225
}
223226

224227
class RefSharedType extends RefType {
228+
pragma[nomagic]
225229
RefSharedType() { this.getTypeItem() instanceof Builtins::RefSharedType }
226230

227231
override string toString() { result = "&" }
@@ -312,6 +316,7 @@ class ImplTraitReturnType extends ImplTraitType {
312316
* with a single type argument.
313317
*/
314318
class SliceType extends StructType {
319+
pragma[nomagic]
315320
SliceType() { this.getTypeItem() instanceof Builtins::SliceType }
316321

317322
override string toString() { result = "[]" }
@@ -338,12 +343,14 @@ TypeParamTypeParameter getPtrTypeParameter() {
338343
}
339344

340345
class PtrMutType extends PtrType {
346+
pragma[nomagic]
341347
PtrMutType() { this.getTypeItem() instanceof Builtins::PtrMutType }
342348

343349
override string toString() { result = "*mut" }
344350
}
345351

346352
class PtrConstType extends PtrType {
353+
pragma[nomagic]
347354
PtrConstType() { this.getTypeItem() instanceof Builtins::PtrConstType }
348355

349356
override string toString() { result = "*const" }

0 commit comments

Comments
 (0)