Merge pull request #17479 from github/redsun82/rust-unextracted

Rust: introduce `Unextracted` and `Missing` "marker" classes
This commit is contained in:
Paolo Tranquilli
2024-09-16 18:26:55 +02:00
committed by GitHub
22 changed files with 435 additions and 44 deletions

View File

@@ -1,2 +1,2 @@
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
top.rs 4bf2a559a91f46a8fadc7de0c3636d0fc9add8de5b97ae289ade79c1d02a8abd 4bf2a559a91f46a8fadc7de0c3636d0fc9add8de5b97ae289ade79c1d02a8abd
top.rs ec9ec5e218af9a6b449b40f716e00bbe23c2777941d105b9ed68071aa2468ca2 ec9ec5e218af9a6b449b40f716e00bbe23c2777941d105b9ed68071aa2468ca2

View File

@@ -32,17 +32,17 @@ impl From<trap::Label<Locatable>> for trap::Label<Element> {
}
#[derive(Debug)]
pub struct Unimplemented {
pub struct Unextracted {
_unused: ()
}
impl trap::TrapClass for Unimplemented {
fn class_name() -> &'static str { "Unimplemented" }
impl trap::TrapClass for Unextracted {
fn class_name() -> &'static str { "Unextracted" }
}
impl From<trap::Label<Unimplemented>> for trap::Label<Element> {
fn from(value: trap::Label<Unimplemented>) -> Self {
// SAFETY: this is safe because in the dbscheme Unimplemented is a subclass of Element
impl From<trap::Label<Unextracted>> for trap::Label<Element> {
fn from(value: trap::Label<Unextracted>) -> Self {
// SAFETY: this is safe because in the dbscheme Unextracted is a subclass of Element
unsafe {
Self::from_untyped(value.as_untyped())
}
@@ -76,6 +76,60 @@ impl From<trap::Label<AstNode>> for trap::Label<Locatable> {
}
}
#[derive(Debug)]
pub struct Missing {
_unused: ()
}
impl trap::TrapClass for Missing {
fn class_name() -> &'static str { "Missing" }
}
impl From<trap::Label<Missing>> for trap::Label<Element> {
fn from(value: trap::Label<Missing>) -> Self {
// SAFETY: this is safe because in the dbscheme Missing is a subclass of Element
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<Missing>> for trap::Label<Unextracted> {
fn from(value: trap::Label<Missing>) -> Self {
// SAFETY: this is safe because in the dbscheme Missing is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
#[derive(Debug)]
pub struct Unimplemented {
_unused: ()
}
impl trap::TrapClass for Unimplemented {
fn class_name() -> &'static str { "Unimplemented" }
}
impl From<trap::Label<Unimplemented>> for trap::Label<Element> {
fn from(value: trap::Label<Unimplemented>) -> Self {
// SAFETY: this is safe because in the dbscheme Unimplemented is a subclass of Element
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<Unimplemented>> for trap::Label<Unextracted> {
fn from(value: trap::Label<Unimplemented>) -> Self {
// SAFETY: this is safe because in the dbscheme Unimplemented is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
#[derive(Debug)]
pub struct Declaration {
_unused: ()
@@ -194,6 +248,15 @@ impl From<trap::Label<GenericArgList>> for trap::Label<Locatable> {
}
}
impl From<trap::Label<GenericArgList>> for trap::Label<Unextracted> {
fn from(value: trap::Label<GenericArgList>) -> Self {
// SAFETY: this is safe because in the dbscheme GenericArgList is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<GenericArgList>> for trap::Label<Unimplemented> {
fn from(value: trap::Label<GenericArgList>) -> Self {
// SAFETY: this is safe because in the dbscheme GenericArgList is a subclass of Unimplemented
@@ -384,6 +447,15 @@ impl From<trap::Label<Path>> for trap::Label<Locatable> {
}
}
impl From<trap::Label<Path>> for trap::Label<Unextracted> {
fn from(value: trap::Label<Path>) -> Self {
// SAFETY: this is safe because in the dbscheme Path is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<Path>> for trap::Label<Unimplemented> {
fn from(value: trap::Label<Path>) -> Self {
// SAFETY: this is safe because in the dbscheme Path is a subclass of Unimplemented
@@ -571,6 +643,15 @@ impl From<trap::Label<TypeRef>> for trap::Label<Locatable> {
}
}
impl From<trap::Label<TypeRef>> for trap::Label<Unextracted> {
fn from(value: trap::Label<TypeRef>) -> Self {
// SAFETY: this is safe because in the dbscheme TypeRef is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<TypeRef>> for trap::Label<Unimplemented> {
fn from(value: trap::Label<TypeRef>) -> Self {
// SAFETY: this is safe because in the dbscheme TypeRef is a subclass of Unimplemented
@@ -2328,6 +2409,24 @@ impl From<trap::Label<MissingExpr>> for trap::Label<Locatable> {
}
}
impl From<trap::Label<MissingExpr>> for trap::Label<Missing> {
fn from(value: trap::Label<MissingExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme MissingExpr is a subclass of Missing
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<MissingExpr>> for trap::Label<Unextracted> {
fn from(value: trap::Label<MissingExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme MissingExpr is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
#[derive(Debug)]
pub struct MissingPat {
pub id: trap::TrapId<MissingPat>,
@@ -2374,6 +2473,15 @@ impl From<trap::Label<MissingPat>> for trap::Label<Locatable> {
}
}
impl From<trap::Label<MissingPat>> for trap::Label<Missing> {
fn from(value: trap::Label<MissingPat>) -> Self {
// SAFETY: this is safe because in the dbscheme MissingPat is a subclass of Missing
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<MissingPat>> for trap::Label<Pat> {
fn from(value: trap::Label<MissingPat>) -> Self {
// SAFETY: this is safe because in the dbscheme MissingPat is a subclass of Pat
@@ -2383,6 +2491,15 @@ impl From<trap::Label<MissingPat>> for trap::Label<Pat> {
}
}
impl From<trap::Label<MissingPat>> for trap::Label<Unextracted> {
fn from(value: trap::Label<MissingPat>) -> Self {
// SAFETY: this is safe because in the dbscheme MissingPat is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
#[derive(Debug)]
pub struct Module {
pub id: trap::TrapId<Module>,
@@ -3555,6 +3672,15 @@ impl From<trap::Label<UnimplementedDeclaration>> for trap::Label<Locatable> {
}
}
impl From<trap::Label<UnimplementedDeclaration>> for trap::Label<Unextracted> {
fn from(value: trap::Label<UnimplementedDeclaration>) -> Self {
// SAFETY: this is safe because in the dbscheme UnimplementedDeclaration is a subclass of Unextracted
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<UnimplementedDeclaration>> for trap::Label<Unimplemented> {
fn from(value: trap::Label<UnimplementedDeclaration>) -> Self {
// SAFETY: this is safe because in the dbscheme UnimplementedDeclaration is a subclass of Unimplemented

View File

@@ -108,10 +108,12 @@ lib/codeql/rust/elements/MatchExprImpl.qll f10fe0e8e8d981eef1123716f7f68cd8b8006
lib/codeql/rust/elements/MethodCallExpr.qll 7aa2cc2d81ffdf420995faf348530af333ea828156acc006ed6d94100ae1d7e3 b7522d9f058b80598931c62a27c5be01a231f9c5c84274a2ea07194cfdd4bf0d
lib/codeql/rust/elements/MethodCallExprConstructor.qll c9e1137ba6b76eabd941ecaa27a5b43b6fc3ff445ad46d3f625ad086de0e0af6 47bc4c30182b891c7009ba536edad7393dc068b72d9dfc16b26174b15d49748e
lib/codeql/rust/elements/MethodCallExprImpl.qll 02f477caf8476a2bd886dde4697ede9b736da346e2c7ccf63fe24f26c79f851c 22fc3e06c69f8e75ea6460e5bf423b4b88a87c5466ad4bbae405190ab7575819
lib/codeql/rust/elements/MissingExpr.qll 4434da948ac3ad85b5b77b6ea00f01da3e9230ffeb39105e370c12b5e2d822b0 6da21f27bf82c6cf8b45a08f97c6ce5d35c41d5e5fd127233092204ec1bc1da7
lib/codeql/rust/elements/Missing.qll 464df3a931277e6527db5e769120dc1e011b7b3fd069b4610a11aad5715ba025 8c656fc4a52e2b7cb9d90c9b821d487cee8766273ea25d58e87ee017a5496515
lib/codeql/rust/elements/MissingExpr.qll 7f790c3a6b017bea73604984d739b2c74c07727f6e95598252551aac8005038c dc500ecb0c859a6f5cc9fe97220723fc29eb86dea92289b78f6e16537de604ae
lib/codeql/rust/elements/MissingExprConstructor.qll c51f4f6e897ef2107a27bd91ecf31ce875611b29a5a12238d5312b9489a35b8d b9ea3fdae459aba6c7ed9eb48edbc5bdbdb4cb41220fff81ed4cd256648612e0
lib/codeql/rust/elements/MissingExprImpl.qll 99c8204ea5fe5219bcd4c4df619edda4088f54020b17fddcb88bd147c553bcad 51b10dadf51772f5dfc11f1b11424dfed70430efe410197dc949945ffb6c4aba
lib/codeql/rust/elements/MissingPat.qll cb4c04b5a739bff39d6067aba39355acb78b88a4c2d252fab3eda4ffcc6d2f90 880a0cbdfada798642ce5c07973006bc64b5cc47d585c889ed777a5c54a1985b
lib/codeql/rust/elements/MissingImpl.qll ca0ac1ae69bb9e259cdd05fa365d78650ca9d4235d506dd1ff80922dc9c03a3c ab6f90d629373be12a13c1ddddfabbf6471cdb9ac8b25ca3dfeea34100d239d6
lib/codeql/rust/elements/MissingPat.qll b304101adbb18c99d8f8144ae75b64d20736f76a469f3a2fdb87b82a55da7fe5 0b7a0a54844024f776c0872c25f4c6d5a41b160c5475b17fda711cd0946b6d0d
lib/codeql/rust/elements/MissingPatConstructor.qll 7bff2fb7fe96388dd703cca5f0bb1d04cea5d1f0729bb54c6604b58e338c7d6b eec9fea46593b3850da111658848cb54cfa9992286eeee313a55def184cf7ec5
lib/codeql/rust/elements/MissingPatImpl.qll 60458ff834389a268a3549a92ae814acea4b187aeb311b1a2720c5d53bd9c2b2 031c634dc571164d99b04e93fffae1bb7ce84ffb74cb92f07cbc2f03ea1b4bae
lib/codeql/rust/elements/Module.qll d0d3f8dd87c2ba55dd4727fa1f4d7521aed4f40c0b7f54aef4f65f9a6f962357 4433369a8693266c6b599798df89b5c3025c02daa2c799071d3ff4588571c904
@@ -187,7 +189,9 @@ lib/codeql/rust/elements/TypeRefImpl.qll 25493d464525e9378596f10648844771f10120e
lib/codeql/rust/elements/UnderscoreExpr.qll e57641a3c7b8e0496cd04877834f3ab40f278f6e8e447bf1c11557c4ed1565f7 390ea08093a5862a95e626ea010519d54f7bb55497cae652e9800fd4ab31dfef
lib/codeql/rust/elements/UnderscoreExprConstructor.qll ea9f93fa6529ec4e5bf5c4a98959b2e013e83fce4a74ebfc476b10bce2b331b2 bc36b62fd4fec6fb388d82e2af2aafe0099138d54b7672be81e84fc511fdcc8f
lib/codeql/rust/elements/UnderscoreExprImpl.qll 0d09ef4d7cca2cbea6b6f43cca2c501c262f34b30567511279efa01c0b33a8aa 0c0da01c9ce89b386a6e671bfc758f6af09e13abd55875de4d1cc7d84e93efd6
lib/codeql/rust/elements/Unimplemented.qll 6d07963ef992b98694ad82f7794f95d0b895ad8361ec2fec58b8c1736fe6975f c01b19f8712aacffac43859ba101f6630c993dc46de734df9bd28c58ad6360b3
lib/codeql/rust/elements/Unextracted.qll f004f5451081e60b8dc9bed73f3de5511b83ac1f96337f608dad52587cfa9a7d 061b94157a851d94cd846fcb73fca390b058c846926a1fa88782e2a9bbf1a36f
lib/codeql/rust/elements/UnextractedImpl.qll 29dac23df70919d97573fd06bc282f31840b361612931cf1b6a626671d6f5493 00b4235299f99b2db06ff413208e89f92626277539604c774fd06bd076ecbf94
lib/codeql/rust/elements/Unimplemented.qll 76a1cb5d786fd9143b84f01fec6df488685f93b417f74c73a2afe4fa41d73017 b0eae25180b16f1b61c9597342b4bc66a8840ee2c2576fdb4ec86196be14c21e
lib/codeql/rust/elements/UnimplementedDeclaration.qll cdbc8675b5062a9fa243c3c4fd132438a494e79422d59cf2e243435253f971a9 043599c5b9e58e0dbb63ae7eb4e692d973e2774abcde505c54ecff1a5df7c88c
lib/codeql/rust/elements/UnimplementedDeclarationConstructor.qll 44f4590db81e7504de0ede43eb2a33a54baa0738732e03a90721187a1cd303f3 11f27d8a9836b78d9ffac79efa3441fbfcb1dfdc1eb028d2016a1769b8a82ad5
lib/codeql/rust/elements/UnimplementedDeclarationImpl.qll 082f552c6ba1cfe38457716e1a062c728eb511e21108f668973ad10666f71788 e7d6bc4ad3f96ff7b7b0c6650ee763e6e24a94ce59a4998da8867140b1e69852
@@ -204,7 +208,7 @@ lib/codeql/rust/elements/YeetExprImpl.qll cdae9759ab0c9be86ff8677831401c8836aa31
lib/codeql/rust/elements/YieldExpr.qll 14cb29e19d67c055c645eb2b0e2ecb68a2e2a8a01c20171b847a23db658e4e45 86f3b63083c45c3a5cdc171080cfc2e5bb9506ef441ea3c5b837898dc8a2335c
lib/codeql/rust/elements/YieldExprConstructor.qll ff46ba17cc24abfcb0e310c7458d0539b704e7a771ad00853bd3a1844e4e6f82 1c13662ef01c88f1cf057d099eb46524036133e51a0e36ddf947f727ac6046bb
lib/codeql/rust/elements/YieldExprImpl.qll c5843bfef6a8a736a44d5eba28184656e206b408256e37e6ba49cf47f12cbc02 d48f6d3617f96af45158e9cd3ea8e628e47e32e2af5872655d8ae504eaf1d351
lib/codeql/rust/elements.qll 5bf8672db5e314d397be3dd79bb18ad3cf23e2dbf978777994b09c7db6c2cca0 5bf8672db5e314d397be3dd79bb18ad3cf23e2dbf978777994b09c7db6c2cca0
lib/codeql/rust/elements.qll ff4b87ba3c6baf57a511d301bb9e16620f6adfe6477eab6040d825f0aa9457bb ff4b87ba3c6baf57a511d301bb9e16620f6adfe6477eab6040d825f0aa9457bb
lib/codeql/rust/generated/ArrayExpr.qll 317af6184126f50f4668d668a448cd4a5fdf217e43f76b4520caf7e1b6ca94c5 7506b60b022812cc60c398f4eb83a621ecbc287d8566c19f17bf55d2d1cf3d5f
lib/codeql/rust/generated/AsmExpr.qll d89faf9f8365c5385369ad59310de2c2885e4f525fed2a3d67403bfc09c247f7 1a86c21eb70e313745e4bdad4be8957f609a430ba242b13911f0fb3528489793
lib/codeql/rust/generated/AstNode.qll cbbb4499b45dafe865e0016b4b663ca2ce064a2d9280907a6e66a61493cba47c c976ed4b382d722947109c521ed68927b71b34cecb8f7595b375e835ecd8b81d
@@ -245,12 +249,13 @@ lib/codeql/rust/generated/LoopExpr.qll d9949923fab46e7cbbef37da0ccaf6236b79dff06
lib/codeql/rust/generated/MatchArm.qll c6139a5c48506b527ce4e852433f2a1360e977c4c7c1bcb5f97e90549cc796a6 d86039b0d07dfea30c26c660b4e021cdac6ef81d5ebddc31b22e01cc562faa94
lib/codeql/rust/generated/MatchExpr.qll 0690bf08e06b4e5131b928f76a5a5b41c3a37de6b51815f6cf44973195430c35 26d30d07d4edd2f9a14ec34df8e6afbd5427da6647897a3df72e8ca49661c1b0
lib/codeql/rust/generated/MethodCallExpr.qll b3ec21c6f08074539db32082852718c8593d305bf7e8cd69644855e02573dd4d b7147ec99730c7840c45a84c7de09bd633ceb601295c8c9015ac4b273680f972
lib/codeql/rust/generated/MissingExpr.qll 2eb28f0f39732973aac23f270931989611c3effe7bc4ff760980b636dd7775dc e31170fed5ae35a286559cb7d4ed51c0b962c0733069d9b72fe9ee8878b3a776
lib/codeql/rust/generated/MissingPat.qll 2c5f913ea7b7af3d21102e132337d3b6591e028d5a5ccf6fc8332afe6116af57 e49170cd0e9a27212d6144e65404cfa8d9ce0a4f1f9f1a3490ac87ab16b86796
lib/codeql/rust/generated/Missing.qll 6ca0fef0a80a2ccfd23d6261c11ba8a2915555fb5b80e1c721631e1330a8a824 3329e9c3fbec15e254e55a08dd420e6d3812215688c6bfaaf05772f466167928
lib/codeql/rust/generated/MissingExpr.qll d6fa9807b877412b5eb55efc47657a24a7c30da856ab4f68c2c383c6341a8676 6d240e11e1c98dbaf4b3420cbc59eb205e6dda3bce9dd520e503c6760d57351f
lib/codeql/rust/generated/MissingPat.qll 144d1a8a37302db2fec5988bb3a70ea18bcc4a503b24adc74a47e86de1a0d09a 06ec132b884c90d5b6526cf1ce667b4b3751292e920cdb06ada29cfba5312497
lib/codeql/rust/generated/Module.qll 83f940c78be74e7c754d1947061375d2c47726d71f20da89bf81656550c13357 72f79e374f05c5f39cc925f19e2b7fb951b13be26aac483e6abb0c57e7a7bbdb
lib/codeql/rust/generated/OffsetOfExpr.qll ea0d17b250e31e8510279bc8a10348a9a06e168af85232f163b367f99241a3d0 ce8238f8b31708b4e1664cdcff5f9d7e90fc7f6cde809d0d9f979add512b54f1
lib/codeql/rust/generated/OrPat.qll 41d9098a946c836cfe142d06b92193ba63aa4b2a97a9854034827f2017657fba 4deb8e35116aae4c1268e8a34c6871b90206cc4cd889e8bd2552e43d3d0ef997
lib/codeql/rust/generated/ParentChild.qll 820abe0506ec7199cab9638d09e2a5bdf3bf5b586094cfe7367ef91a5f837059 0e22f96ff9169403d51fc420e7b3b4cd45e257577625dcf63200f1e32f8c8cdf
lib/codeql/rust/generated/ParentChild.qll e5e3dfe67e92553c3bed102e1217b44689c956fa165383baf57b74121da69b90 3c231960313227cb88d80dff8959f4d1a68ac9c09f3dfe5747008b7497609071
lib/codeql/rust/generated/Pat.qll 4916b1ceec8946e4eedfc3245e6f88eea71b60b3820624d47e2985933c58ffaa a489a10d6fd57350d4116a0b2a47a5191bd7f25d74d7c8072eed5eccb20a2f29
lib/codeql/rust/generated/Path.qll 01a601bd639cbbdd8f8d7498741d203e2645a6e318c1b6e7ce9be7b68e941579 d593d21e6311620d95cd5c78a14d83f6f68235d9a79f29b786552bb83c44f457
lib/codeql/rust/generated/PathExpr.qll 19d838f4f3c383260824f93ddeaa33952474c6e3f6b78bdcb0e7d716aab8e9a8 f3560a67df0cb0201f54e07af53db7288bb29e847b44fa509c900355a95462be
@@ -259,7 +264,7 @@ lib/codeql/rust/generated/PrefixExpr.qll 536e297b1e20724912858808f1a7beed5d91de8
lib/codeql/rust/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971
lib/codeql/rust/generated/RangeExpr.qll da855688801fb3ae8a2d14534d3995128d9271ea6f802c6ae88290780755a138 9a34019548931e840af4d4912deaa2ff32a1466bd416bf8152207991842ad08d
lib/codeql/rust/generated/RangePat.qll 8e610b20f098bd1f8cc199e435dbb351cc93f96e1ca24d07305b27db8dee1d3b 558408935e3dc8f79fbc9ea8a0984d4d60daa18de9d604602ea588d0c5e73761
lib/codeql/rust/generated/Raw.qll 358a5b315ed73e67446de7d4c32a6430832fa7cbf62f2be3ee0100c494ff3764 6b9628a5e9a8d6d953f87d332520652654292932225abc4d60c6a1dba1cd369c
lib/codeql/rust/generated/Raw.qll d876ce05f7dd89eee1677c52f97b84c352705f63e6382f07782fb2a34938fe98 9a811e7d876e8fffd3564787221e39f954100abc67a6f550af6f7e1b70e44551
lib/codeql/rust/generated/RecordExpr.qll b0f497f4f39ff1e5a5f8e2b62407c54348f531b1fd8dd87966cf01e1677bd5c7 74790b0b345194a4835a59a970d849b1b2b12cd280e572121d7c1a200eb07466
lib/codeql/rust/generated/RecordExprField.qll 009312ffe68ed00aad56366a41cf0c956c3f261e49f64ae811d7e05bc2ba050a cdb14fe842e9d7cdef1c450b652294089096e60951cca31c906ed9de8708ce6b
lib/codeql/rust/generated/RecordPat.qll 72ce89d623b89e353f5f0f18fb838d0b562e09c0bf0ed5666b5c44a5cb4d3473 6a34dedabf834dc29e60b71f1030c360d1c80c094e4410a0a22f262b0f0a72a4
@@ -270,14 +275,15 @@ lib/codeql/rust/generated/RepeatExpr.qll e5d6531a220d2b9fc4b2bcc2c1de37451c04b77
lib/codeql/rust/generated/ReturnExpr.qll 1ddb28ebc78571ccdd7a5041d420ef13104f3d1234fe8cdc69ea78988ea2b23e d2aae6ad277d15b8b72306e5b7306d704b6802e8af14b962d718764adc7c99d5
lib/codeql/rust/generated/SlicePat.qll becd164fa33a4011492f9c916064332580c48fe05553028ef212830b78462663 d41ed9fea69f6be42d16e65ffea007c8f7a868ba78df68a8963ff521b4c49217
lib/codeql/rust/generated/Stmt.qll 21d2d6ef43b33c284e5a79dccddd06b120b18ca9fc338e1dc1c41e93d2d6aed7 6878407bf22eeb5fe8cefa391abc5eddab14f6f228150a6c18e48e2d1ef35498
lib/codeql/rust/generated/Synth.qll 69415291e37195836bcc6810cccfdbacad4e1528bb125e26d2cc6b53daf1666b 6c79ab425ea2e132a2bc0eeea4f9f62cf3e259e911deb0c02c9fbdd56957e291
lib/codeql/rust/generated/Synth.qll e01241112720e440391394b022405e0f5d5fa8c09f9de2f2d2ac1d66b548f9c7 b23b3489ed588352f862558e824d03be8507f3418d31b3908578af59c545d761
lib/codeql/rust/generated/SynthConstructors.qll a3f96d7ed12ff96ae404d55b89988be47a3b573d2ad2ac327ec0b27a110b9748 a3f96d7ed12ff96ae404d55b89988be47a3b573d2ad2ac327ec0b27a110b9748
lib/codeql/rust/generated/TupleExpr.qll 3f48e7c1807ef8a6e9fce4207ee59b9c637f9675fc5cb63618d56e4e62dd9585 e85714d2a91a909aa1b274a739223fd68195a2068560205929f8e24eb4d72fe2
lib/codeql/rust/generated/TuplePat.qll a2ce6769858e04784add9f59dca657835a49b1a35a6d9a7e0185fc782ef967d5 fdae4367ce22286eda74b360a3678d8e1aa890a49c06041911ecab2990a16d85
lib/codeql/rust/generated/TupleStructPat.qll 8526f37635c24d3b14b832d292b9031e76a2f6fd380692f823bbdcac3720921d cbbd37c451ba84662ea3599715ca1f462f775ff991173b0bc902e283076e9a70
lib/codeql/rust/generated/TypeRef.qll da58fcdd6f37047e043eda92fc3599f68369dea0e263c071d8130eae1e1b4ded ba9a26dbe28893943753a0a09cd120742f5c413fdee8918ce55cc12c47086d0f
lib/codeql/rust/generated/UnderscoreExpr.qll 24841397e30624137c664e714937d9a09c1b56f568659e12c1f93e49a97eba83 d14b10ba9c0df6b51ab99d8bc574fadf3a5ad49385920bff8b7ba4cf88827749
lib/codeql/rust/generated/Unimplemented.qll 58fb8b9cf32f915797e58bb70a44db1a300d23861640f1e9e7bb8d223f87ac45 41c8a145b817232ee94afe5b93d399d64b7437c378acd22b5fa6197549d78e55
lib/codeql/rust/generated/Unextracted.qll 7e3000f0668484516df80e66db7d0201b679377bc7a2f873b1867bf04125917f 09c352b3bd7abb4ae363e978cd8b1b95f2db5e2d311bdb40e88f151b9b682b83
lib/codeql/rust/generated/Unimplemented.qll 89769a37081b039ae7b95cf2d930782a1f5e771fe3d0ddd9719599263b00c6ae 6e3510b9ea70839033b041bb25422c3bde28748f01073040045ad4a18fec0ee2
lib/codeql/rust/generated/UnimplementedDeclaration.qll 1bacaae450715f75ca0616565b7f6a53c1f4228a5a209135dead0c9d5e1a83eb b757581f2a7bac46d41bfac9fc254f9733b9b267ec7ac76a4a2bcf9779ee0f73
lib/codeql/rust/generated/UnsafeBlockExpr.qll ff3f08617aefc833cc115024470c252578a41ca6a91e009be8045635699a6fe2 9dd7ab2afe70fa6da6bd58a1eadf00e30cc99f8f583b7c281bd90563f243d676
lib/codeql/rust/generated/WildcardPat.qll 29f0b04b4425e597d34f7187f182efd1636196ed88dddf0e5b678c399af1fd2e cf55059e165f5b9b91413c0efab5db9aa9ff11762537782c2caf5974c32c2461

6
rust/ql/.gitattributes generated vendored
View File

@@ -110,9 +110,11 @@
/lib/codeql/rust/elements/MethodCallExpr.qll linguist-generated
/lib/codeql/rust/elements/MethodCallExprConstructor.qll linguist-generated
/lib/codeql/rust/elements/MethodCallExprImpl.qll linguist-generated
/lib/codeql/rust/elements/Missing.qll linguist-generated
/lib/codeql/rust/elements/MissingExpr.qll linguist-generated
/lib/codeql/rust/elements/MissingExprConstructor.qll linguist-generated
/lib/codeql/rust/elements/MissingExprImpl.qll linguist-generated
/lib/codeql/rust/elements/MissingImpl.qll linguist-generated
/lib/codeql/rust/elements/MissingPat.qll linguist-generated
/lib/codeql/rust/elements/MissingPatConstructor.qll linguist-generated
/lib/codeql/rust/elements/MissingPatImpl.qll linguist-generated
@@ -189,6 +191,8 @@
/lib/codeql/rust/elements/UnderscoreExpr.qll linguist-generated
/lib/codeql/rust/elements/UnderscoreExprConstructor.qll linguist-generated
/lib/codeql/rust/elements/UnderscoreExprImpl.qll linguist-generated
/lib/codeql/rust/elements/Unextracted.qll linguist-generated
/lib/codeql/rust/elements/UnextractedImpl.qll linguist-generated
/lib/codeql/rust/elements/Unimplemented.qll linguist-generated
/lib/codeql/rust/elements/UnimplementedDeclaration.qll linguist-generated
/lib/codeql/rust/elements/UnimplementedDeclarationConstructor.qll linguist-generated
@@ -247,6 +251,7 @@
/lib/codeql/rust/generated/MatchArm.qll linguist-generated
/lib/codeql/rust/generated/MatchExpr.qll linguist-generated
/lib/codeql/rust/generated/MethodCallExpr.qll linguist-generated
/lib/codeql/rust/generated/Missing.qll linguist-generated
/lib/codeql/rust/generated/MissingExpr.qll linguist-generated
/lib/codeql/rust/generated/MissingPat.qll linguist-generated
/lib/codeql/rust/generated/Module.qll linguist-generated
@@ -279,6 +284,7 @@
/lib/codeql/rust/generated/TupleStructPat.qll linguist-generated
/lib/codeql/rust/generated/TypeRef.qll linguist-generated
/lib/codeql/rust/generated/UnderscoreExpr.qll linguist-generated
/lib/codeql/rust/generated/Unextracted.qll linguist-generated
/lib/codeql/rust/generated/Unimplemented.qll linguist-generated
/lib/codeql/rust/generated/UnimplementedDeclaration.qll linguist-generated
/lib/codeql/rust/generated/UnsafeBlockExpr.qll linguist-generated

View File

@@ -43,6 +43,7 @@ import codeql.rust.elements.LoopExpr
import codeql.rust.elements.MatchArm
import codeql.rust.elements.MatchExpr
import codeql.rust.elements.MethodCallExpr
import codeql.rust.elements.Missing
import codeql.rust.elements.MissingExpr
import codeql.rust.elements.MissingPat
import codeql.rust.elements.Module
@@ -70,6 +71,7 @@ import codeql.rust.elements.TuplePat
import codeql.rust.elements.TupleStructPat
import codeql.rust.elements.TypeRef
import codeql.rust.elements.UnderscoreExpr
import codeql.rust.elements.Unextracted
import codeql.rust.elements.Unimplemented
import codeql.rust.elements.UnimplementedDeclaration
import codeql.rust.elements.UnsafeBlockExpr

View File

@@ -0,0 +1,12 @@
// generated by codegen, do not edit
/**
* This module provides the public class `Missing`.
*/
private import MissingImpl
import codeql.rust.elements.Unextracted
/**
* The base class marking errors during parsing or resolution.
*/
final class Missing = Impl::Missing;

View File

@@ -5,6 +5,7 @@
private import MissingExprImpl
import codeql.rust.elements.Expr
import codeql.rust.elements.Missing
/**
* A missing expression, used as a placeholder for incomplete syntax.

View File

@@ -0,0 +1,19 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module provides a hand-modifiable wrapper around the generated class `Missing`.
*
* INTERNAL: Do not use.
*/
private import codeql.rust.generated.Missing
/**
* INTERNAL: This module contains the customizable definition of `Missing` and should not
* be referenced directly.
*/
module Impl {
/**
* The base class marking errors during parsing or resolution.
*/
class Missing extends Generated::Missing { }
}

View File

@@ -4,6 +4,7 @@
*/
private import MissingPatImpl
import codeql.rust.elements.Missing
import codeql.rust.elements.Pat
/**

View File

@@ -0,0 +1,15 @@
// generated by codegen, do not edit
/**
* This module provides the public class `Unextracted`.
*/
private import UnextractedImpl
import codeql.rust.elements.Element
/**
* The base class marking everything that was not properly extracted for some reason, such as:
* * syntax errors
* * insufficient context information
* * yet unimplemented parts of the extractor
*/
final class Unextracted = Impl::Unextracted;

View File

@@ -0,0 +1,22 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module provides a hand-modifiable wrapper around the generated class `Unextracted`.
*
* INTERNAL: Do not use.
*/
private import codeql.rust.generated.Unextracted
/**
* INTERNAL: This module contains the customizable definition of `Unextracted` and should not
* be referenced directly.
*/
module Impl {
/**
* The base class marking everything that was not properly extracted for some reason, such as:
* * syntax errors
* * insufficient context information
* * yet unimplemented parts of the extractor
*/
class Unextracted extends Generated::Unextracted { }
}

View File

@@ -4,7 +4,7 @@
*/
private import UnimplementedImpl
import codeql.rust.elements.Element
import codeql.rust.elements.Unextracted
/**
* The base class for unimplemented nodes. This is used to mark nodes that are not yet extracted.

View File

@@ -0,0 +1,22 @@
// generated by codegen, do not edit
/**
* This module provides the generated definition of `Missing`.
* INTERNAL: Do not import directly.
*/
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.UnextractedImpl::Impl as UnextractedImpl
/**
* INTERNAL: This module contains the fully generated definition of `Missing` and should not
* be referenced directly.
*/
module Generated {
/**
* The base class marking errors during parsing or resolution.
* INTERNAL: Do not reference the `Generated::Missing` class directly.
* Use the subclass `Missing`, where the following predicates are available.
*/
class Missing extends Synth::TMissing, UnextractedImpl::Unextracted { }
}

View File

@@ -7,6 +7,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.ExprImpl::Impl as ExprImpl
import codeql.rust.elements.MissingImpl::Impl as MissingImpl
/**
* INTERNAL: This module contains the fully generated definition of `MissingExpr` and should not
@@ -22,7 +23,7 @@ module Generated {
* INTERNAL: Do not reference the `Generated::MissingExpr` class directly.
* Use the subclass `MissingExpr`, where the following predicates are available.
*/
class MissingExpr extends Synth::TMissingExpr, ExprImpl::Expr {
class MissingExpr extends Synth::TMissingExpr, ExprImpl::Expr, MissingImpl::Missing {
override string getAPrimaryQlClass() { result = "MissingExpr" }
}
}

View File

@@ -6,6 +6,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.MissingImpl::Impl as MissingImpl
import codeql.rust.elements.PatImpl::Impl as PatImpl
/**
@@ -23,7 +24,7 @@ module Generated {
* INTERNAL: Do not reference the `Generated::MissingPat` class directly.
* Use the subclass `MissingPat`, where the following predicates are available.
*/
class MissingPat extends Synth::TMissingPat, PatImpl::Pat {
class MissingPat extends Synth::TMissingPat, PatImpl::Pat, MissingImpl::Missing {
override string getAPrimaryQlClass() { result = "MissingPat" }
}
}

View File

@@ -23,8 +23,8 @@ private module Impl {
)
}
private Element getImmediateChildOfUnimplemented(
Unimplemented e, int index, string partialPredicateCall
private Element getImmediateChildOfUnextracted(
Unextracted e, int index, string partialPredicateCall
) {
exists(int b, int bElement, int n |
b = 0 and
@@ -51,6 +51,36 @@ private module Impl {
)
}
private Element getImmediateChildOfMissing(Missing e, int index, string partialPredicateCall) {
exists(int b, int bUnextracted, int n |
b = 0 and
bUnextracted =
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnextracted(e, i, _)) | i) and
n = bUnextracted and
(
none()
or
result = getImmediateChildOfUnextracted(e, index - b, partialPredicateCall)
)
)
}
private Element getImmediateChildOfUnimplemented(
Unimplemented e, int index, string partialPredicateCall
) {
exists(int b, int bUnextracted, int n |
b = 0 and
bUnextracted =
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnextracted(e, i, _)) | i) and
n = bUnextracted and
(
none()
or
result = getImmediateChildOfUnextracted(e, index - b, partialPredicateCall)
)
)
}
private Element getImmediateChildOfDeclaration(
Declaration e, int index, string partialPredicateCall
) {
@@ -763,27 +793,33 @@ private module Impl {
private Element getImmediateChildOfMissingExpr(
MissingExpr e, int index, string partialPredicateCall
) {
exists(int b, int bExpr, int n |
exists(int b, int bExpr, int bMissing, int n |
b = 0 and
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
n = bExpr and
bMissing = bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfMissing(e, i, _)) | i) and
n = bMissing and
(
none()
or
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
or
result = getImmediateChildOfMissing(e, index - bExpr, partialPredicateCall)
)
)
}
private Element getImmediateChildOfMissingPat(MissingPat e, int index, string partialPredicateCall) {
exists(int b, int bPat, int n |
exists(int b, int bPat, int bMissing, int n |
b = 0 and
bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and
n = bPat and
bMissing = bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfMissing(e, i, _)) | i) and
n = bMissing and
(
none()
or
result = getImmediateChildOfPat(e, index - b, partialPredicateCall)
or
result = getImmediateChildOfMissing(e, index - bPat, partialPredicateCall)
)
)
}

View File

@@ -17,15 +17,30 @@ module Raw {
/**
* INTERNAL: Do not use.
* The base class for unimplemented nodes. This is used to mark nodes that are not yet extracted.
* The base class marking everything that was not properly extracted for some reason, such as:
* * syntax errors
* * insufficient context information
* * yet unimplemented parts of the extractor
*/
class Unimplemented extends @unimplemented, Element { }
class Unextracted extends @unextracted, Element { }
/**
* INTERNAL: Do not use.
*/
class AstNode extends @ast_node, Locatable { }
/**
* INTERNAL: Do not use.
* The base class marking errors during parsing or resolution.
*/
class Missing extends @missing, Unextracted { }
/**
* INTERNAL: Do not use.
* The base class for unimplemented nodes. This is used to mark nodes that are not yet extracted.
*/
class Unimplemented extends @unimplemented, Unextracted { }
/**
* INTERNAL: Do not use.
* The base class for declarations.
@@ -903,7 +918,7 @@ module Raw {
* let x = non_existing_macro!();
* ```
*/
class MissingExpr extends @missing_expr, Expr {
class MissingExpr extends @missing_expr, Expr, Missing {
override string toString() { result = "MissingExpr" }
}
@@ -916,7 +931,7 @@ module Raw {
* };
* ```
*/
class MissingPat extends @missing_pat, Pat {
class MissingPat extends @missing_pat, Pat, Missing {
override string toString() { result = "MissingPat" }
}

View File

@@ -308,6 +308,11 @@ module Synth {
*/
class TLocatable = TAstNode;
/**
* INTERNAL: Do not use.
*/
class TMissing = TMissingExpr or TMissingPat;
/**
* INTERNAL: Do not use.
*/
@@ -321,6 +326,11 @@ module Synth {
*/
class TStmt = TExprStmt or TItemStmt or TLetStmt;
/**
* INTERNAL: Do not use.
*/
class TUnextracted = TMissing or TUnimplemented;
/**
* INTERNAL: Do not use.
*/
@@ -843,7 +853,7 @@ module Synth {
TElement convertElementFromRaw(Raw::Element e) {
result = convertLocatableFromRaw(e)
or
result = convertUnimplementedFromRaw(e)
result = convertUnextractedFromRaw(e)
}
/**
@@ -926,6 +936,17 @@ module Synth {
cached
TLocatable convertLocatableFromRaw(Raw::Element e) { result = convertAstNodeFromRaw(e) }
/**
* INTERNAL: Do not use.
* Converts a raw DB element to a synthesized `TMissing`, if possible.
*/
cached
TMissing convertMissingFromRaw(Raw::Element e) {
result = convertMissingExprFromRaw(e)
or
result = convertMissingPatFromRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a raw DB element to a synthesized `TPat`, if possible.
@@ -974,6 +995,17 @@ module Synth {
result = convertLetStmtFromRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a raw DB element to a synthesized `TUnextracted`, if possible.
*/
cached
TUnextracted convertUnextractedFromRaw(Raw::Element e) {
result = convertMissingFromRaw(e)
or
result = convertUnimplementedFromRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a raw DB element to a synthesized `TUnimplemented`, if possible.
@@ -1506,7 +1538,7 @@ module Synth {
Raw::Element convertElementToRaw(TElement e) {
result = convertLocatableToRaw(e)
or
result = convertUnimplementedToRaw(e)
result = convertUnextractedToRaw(e)
}
/**
@@ -1589,6 +1621,17 @@ module Synth {
cached
Raw::Element convertLocatableToRaw(TLocatable e) { result = convertAstNodeToRaw(e) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TMissing` to a raw DB element, if possible.
*/
cached
Raw::Element convertMissingToRaw(TMissing e) {
result = convertMissingExprToRaw(e)
or
result = convertMissingPatToRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a synthesized `TPat` to a raw DB element, if possible.
@@ -1637,6 +1680,17 @@ module Synth {
result = convertLetStmtToRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a synthesized `TUnextracted` to a raw DB element, if possible.
*/
cached
Raw::Element convertUnextractedToRaw(TUnextracted e) {
result = convertMissingToRaw(e)
or
result = convertUnimplementedToRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a synthesized `TUnimplemented` to a raw DB element, if possible.

View File

@@ -0,0 +1,25 @@
// generated by codegen, do not edit
/**
* This module provides the generated definition of `Unextracted`.
* INTERNAL: Do not import directly.
*/
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.ElementImpl::Impl as ElementImpl
/**
* INTERNAL: This module contains the fully generated definition of `Unextracted` and should not
* be referenced directly.
*/
module Generated {
/**
* The base class marking everything that was not properly extracted for some reason, such as:
* * syntax errors
* * insufficient context information
* * yet unimplemented parts of the extractor
* INTERNAL: Do not reference the `Generated::Unextracted` class directly.
* Use the subclass `Unextracted`, where the following predicates are available.
*/
class Unextracted extends Synth::TUnextracted, ElementImpl::Element { }
}

View File

@@ -6,7 +6,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.ElementImpl::Impl as ElementImpl
import codeql.rust.elements.UnextractedImpl::Impl as UnextractedImpl
/**
* INTERNAL: This module contains the fully generated definition of `Unimplemented` and should not
@@ -18,5 +18,5 @@ module Generated {
* INTERNAL: Do not reference the `Generated::Unimplemented` class directly.
* Use the subclass `Unimplemented`, where the following predicates are available.
*/
class Unimplemented extends Synth::TUnimplemented, ElementImpl::Element { }
class Unimplemented extends Synth::TUnimplemented, UnextractedImpl::Unextracted { }
}

View File

@@ -121,18 +121,16 @@ locatable_locations(
@element =
@locatable
| @unimplemented
| @unextracted
;
@locatable =
@ast_node
;
@unimplemented =
@generic_arg_list
| @path
| @type_ref
| @unimplemented_declaration
@unextracted =
@missing
| @unimplemented
;
@ast_node =
@@ -149,6 +147,18 @@ locatable_locations(
| @type_ref
;
@missing =
@missing_expr
| @missing_pat
;
@unimplemented =
@generic_arg_list
| @path
| @type_ref
| @unimplemented_declaration
;
@declaration =
@function
| @module

View File

@@ -19,7 +19,6 @@ include("prefix.dbscheme")
class Element:
pass
@qltest.skip
class Locatable(Element):
pass
@@ -31,7 +30,25 @@ class AstNode(Locatable):
@qltest.skip
class Unimplemented(Element):
class Unextracted(Element):
"""
The base class marking everything that was not properly extracted for some reason, such as:
* syntax errors
* insufficient context information
* yet unimplemented parts of the extractor
"""
pass
@qltest.skip
class Missing(Unextracted):
"""
The base class marking errors during parsing or resolution.
"""
@qltest.skip
class Unimplemented(Unextracted):
"""
The base class for unimplemented nodes. This is used to mark nodes that are not yet extracted.
"""
@@ -156,7 +173,7 @@ class Function(Declaration):
@rust.doc_test_signature("() -> ()")
class MissingExpr(Expr):
class MissingExpr(Expr, Missing):
"""
A missing expression, used as a placeholder for incomplete syntax.
@@ -821,7 +838,7 @@ class ItemStmt(Stmt):
@rust.doc_test_signature("() -> ()")
class MissingPat(Pat):
class MissingPat(Pat, Missing):
"""
A missing pattern, used as a place holder for incomplete syntax.
```