Rust: run codegen again

This commit is contained in:
Paolo Tranquilli
2025-07-15 14:32:13 +02:00
parent 7b48cb2ce8
commit c5afc65491
12 changed files with 209 additions and 155 deletions

View File

@@ -1,2 +1,2 @@
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
top.rs 409eb2e5fb18cb360a7d255fc2d7926a78bcd2d3c9f8dcdfce0419cea49d1489 409eb2e5fb18cb360a7d255fc2d7926a78bcd2d3c9f8dcdfce0419cea49d1489 top.rs 0fc473b83d7cd550396b5c147829487fa7264121b6823fd371b78f55e48935b0 0fc473b83d7cd550396b5c147829487fa7264121b6823fd371b78f55e48935b0

View File

@@ -3615,73 +3615,6 @@ impl From<trap::Label<AsmConst>> for trap::Label<Element> {
} }
} }
#[derive(Debug)]
pub struct AsmExpr {
pub id: trap::TrapId<AsmExpr>,
pub asm_pieces: Vec<trap::Label<AsmPiece>>,
pub attrs: Vec<trap::Label<Attr>>,
pub template: Vec<trap::Label<Expr>>,
}
impl trap::TrapEntry for AsmExpr {
fn extract_id(&mut self) -> trap::TrapId<Self> {
std::mem::replace(&mut self.id, trap::TrapId::Star)
}
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
out.add_tuple("asm_exprs", vec![id.into()]);
for (i, v) in self.asm_pieces.into_iter().enumerate() {
out.add_tuple("asm_expr_asm_pieces", vec![id.into(), i.into(), v.into()]);
}
for (i, v) in self.attrs.into_iter().enumerate() {
out.add_tuple("asm_expr_attrs", vec![id.into(), i.into(), v.into()]);
}
for (i, v) in self.template.into_iter().enumerate() {
out.add_tuple("asm_expr_templates", vec![id.into(), i.into(), v.into()]);
}
}
}
impl trap::TrapClass for AsmExpr {
fn class_name() -> &'static str { "AsmExpr" }
}
impl From<trap::Label<AsmExpr>> for trap::Label<Expr> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Expr
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<AstNode> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of AstNode
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Locatable> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Locatable
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Element> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Element
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
#[derive(Debug)] #[derive(Debug)]
pub struct AsmLabel { pub struct AsmLabel {
pub id: trap::TrapId<AsmLabel>, pub id: trap::TrapId<AsmLabel>,
@@ -8831,6 +8764,100 @@ impl From<trap::Label<Adt>> for trap::Label<Addressable> {
} }
} }
#[derive(Debug)]
pub struct AsmExpr {
pub id: trap::TrapId<AsmExpr>,
pub asm_pieces: Vec<trap::Label<AsmPiece>>,
pub attrs: Vec<trap::Label<Attr>>,
pub template: Vec<trap::Label<Expr>>,
}
impl trap::TrapEntry for AsmExpr {
fn extract_id(&mut self) -> trap::TrapId<Self> {
std::mem::replace(&mut self.id, trap::TrapId::Star)
}
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
out.add_tuple("asm_exprs", vec![id.into()]);
for (i, v) in self.asm_pieces.into_iter().enumerate() {
out.add_tuple("asm_expr_asm_pieces", vec![id.into(), i.into(), v.into()]);
}
for (i, v) in self.attrs.into_iter().enumerate() {
out.add_tuple("asm_expr_attrs", vec![id.into(), i.into(), v.into()]);
}
for (i, v) in self.template.into_iter().enumerate() {
out.add_tuple("asm_expr_templates", vec![id.into(), i.into(), v.into()]);
}
}
}
impl trap::TrapClass for AsmExpr {
fn class_name() -> &'static str { "AsmExpr" }
}
impl From<trap::Label<AsmExpr>> for trap::Label<Expr> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Expr
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<AstNode> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of AstNode
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Locatable> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Locatable
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Element> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Element
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Item> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Item
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Stmt> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Stmt
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
impl From<trap::Label<AsmExpr>> for trap::Label<Addressable> {
fn from(value: trap::Label<AsmExpr>) -> Self {
// SAFETY: this is safe because in the dbscheme AsmExpr is a subclass of Addressable
unsafe {
Self::from_untyped(value.as_untyped())
}
}
}
#[derive(Debug)] #[derive(Debug)]
pub struct AssocItem { pub struct AssocItem {
_unused: () _unused: ()

View File

@@ -212,6 +212,7 @@ impl Translator<'_> {
return Some(label); return Some(label);
} }
let label = match node { let label = match node {
ast::Item::AsmExpr(inner) => self.emit_asm_expr(inner).map(Into::into),
ast::Item::Const(inner) => self.emit_const(inner).map(Into::into), ast::Item::Const(inner) => self.emit_const(inner).map(Into::into),
ast::Item::Enum(inner) => self.emit_enum(inner).map(Into::into), ast::Item::Enum(inner) => self.emit_enum(inner).map(Into::into),
ast::Item::ExternBlock(inner) => self.emit_extern_block(inner).map(Into::into), ast::Item::ExternBlock(inner) => self.emit_extern_block(inner).map(Into::into),

View File

@@ -10,7 +10,7 @@ lib/codeql/rust/elements/ArrayTypeRepr.qll a3e61c99567893aa26c610165696e54d11c16
lib/codeql/rust/elements/AsmClobberAbi.qll eb5628916f41ab47e333b4528fba3fb80caecd2805fb20ba4f5c8d59c9677f14 636fce6b3a7f04141d0d3a53734d08a188a45bcc04f755bb66746d4f0a13fa72 lib/codeql/rust/elements/AsmClobberAbi.qll eb5628916f41ab47e333b4528fba3fb80caecd2805fb20ba4f5c8d59c9677f14 636fce6b3a7f04141d0d3a53734d08a188a45bcc04f755bb66746d4f0a13fa72
lib/codeql/rust/elements/AsmConst.qll f408468624dd0c80c6dcf62d17e65a94cd477a5a760be1b5fdd07c8189a3b4ea e4159073b3ee6d247e8962ce925da55ea39ee2cd1649f8b785a92aea17dbf144 lib/codeql/rust/elements/AsmConst.qll f408468624dd0c80c6dcf62d17e65a94cd477a5a760be1b5fdd07c8189a3b4ea e4159073b3ee6d247e8962ce925da55ea39ee2cd1649f8b785a92aea17dbf144
lib/codeql/rust/elements/AsmDirSpec.qll 0c439c031c9f60596373aee8ae2ee70068582548ae365a3c7c19c8b5e2b030d2 0127b08b99bd8725cb6273c1a930aef4434897f23611cfc4ec2dd1b7c9d7e3d0 lib/codeql/rust/elements/AsmDirSpec.qll 0c439c031c9f60596373aee8ae2ee70068582548ae365a3c7c19c8b5e2b030d2 0127b08b99bd8725cb6273c1a930aef4434897f23611cfc4ec2dd1b7c9d7e3d0
lib/codeql/rust/elements/AsmExpr.qll 33a9a873ba05235dd80103ed22555eee220a4c0cb86605d0f76bcda316605449 c8a99b7bd55aac41e56d05cd5a52692f1d835ed3e1a1bd029bb41d8e2b81b240 lib/codeql/rust/elements/AsmExpr.qll 0a477c401583a778ea6736070eaf8959f9312135e863e45fafb6c160da2e8f1b 0447b2438c694f9e9bd2629abb66281724d27b17e534fa8e9a19b2ea30af18d2
lib/codeql/rust/elements/AsmLabel.qll 5fa3401c49329ddc845bd95d5f498a455202f685e962dfec9bc91550577da800 f54fe1dcd3c76f36e6abc7b56dc5d6f5b1c30d0fb434db21dd8a1ce731fc6abf lib/codeql/rust/elements/AsmLabel.qll 5fa3401c49329ddc845bd95d5f498a455202f685e962dfec9bc91550577da800 f54fe1dcd3c76f36e6abc7b56dc5d6f5b1c30d0fb434db21dd8a1ce731fc6abf
lib/codeql/rust/elements/AsmOperand.qll 3987a289233fe09f41f20b27939655cc72fa46847969a55cca6d6393f906969a 8810ff2a64f29d1441a449f5fd74bdc1107782172c7a21baaeb48a40930b7d5a lib/codeql/rust/elements/AsmOperand.qll 3987a289233fe09f41f20b27939655cc72fa46847969a55cca6d6393f906969a 8810ff2a64f29d1441a449f5fd74bdc1107782172c7a21baaeb48a40930b7d5a
lib/codeql/rust/elements/AsmOperandExpr.qll 72d4455cf742dc977b0a33ea21539422aaf2263f36c6f4420ddcb360ac606a0a 03bd01e81b291c915deb20ce33d5bdf73a709fbc007ab7570490e9a8e7c8604c lib/codeql/rust/elements/AsmOperandExpr.qll 72d4455cf742dc977b0a33ea21539422aaf2263f36c6f4420ddcb360ac606a0a 03bd01e81b291c915deb20ce33d5bdf73a709fbc007ab7570490e9a8e7c8604c
@@ -469,7 +469,7 @@ lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll d1db33bc2c13e5bc6f
lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll 579cabafcf0387a9270112ffa53c0b542c1bfbbebfe5c916ac2e6a9b2453539a 8048f5d8759425c55dc46d8fe502687edc29209e290094e9bcd24ff943c8d801 lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll 579cabafcf0387a9270112ffa53c0b542c1bfbbebfe5c916ac2e6a9b2453539a 8048f5d8759425c55dc46d8fe502687edc29209e290094e9bcd24ff943c8d801
lib/codeql/rust/elements/internal/generated/AsmConst.qll 26c96fc41f2b517b7756fd602c8b0cd4849c7090013fb3f8a5e290e5eabe80cc f0f1bf3e8ae7e20e1c2ab638428190c58ee242a7d15c480ed9c5f789ce42c9cb lib/codeql/rust/elements/internal/generated/AsmConst.qll 26c96fc41f2b517b7756fd602c8b0cd4849c7090013fb3f8a5e290e5eabe80cc f0f1bf3e8ae7e20e1c2ab638428190c58ee242a7d15c480ed9c5f789ce42c9cb
lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll 4064e9c98aeebfebf29d013f6280f44548996d6f185b19bf96b1b23384c976b9 2bb0b99d20c0fdd6d54d4a1947a02372b6e4b197fb887ad058290ae97f015953 lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll 4064e9c98aeebfebf29d013f6280f44548996d6f185b19bf96b1b23384c976b9 2bb0b99d20c0fdd6d54d4a1947a02372b6e4b197fb887ad058290ae97f015953
lib/codeql/rust/elements/internal/generated/AsmExpr.qll 35df35b391d8bf7ccc53b5ffb1b700984bf423cafc89003cb6e3abd92791a127 0fff4199625c179ab4117cfa9762390a259ea0cba902713efc0f5eb200746b99 lib/codeql/rust/elements/internal/generated/AsmExpr.qll afabf734bf93040451cb22d22f71ab9b2abb176bd6e0d862f5cc67d687f84e4c 7e35b3bc93b5e6f6b7259f3261234421eb5778a47192bc0f5e54d062d3bc8dde
lib/codeql/rust/elements/internal/generated/AsmLabel.qll 3e97e64f0682709f05464218e0182f64537e08079b0f276738c83eae92c22d25 3ce70364762bc8c0eeb13940406a0613a815a0ae68b24f7e3a1a649a6fe05c89 lib/codeql/rust/elements/internal/generated/AsmLabel.qll 3e97e64f0682709f05464218e0182f64537e08079b0f276738c83eae92c22d25 3ce70364762bc8c0eeb13940406a0613a815a0ae68b24f7e3a1a649a6fe05c89
lib/codeql/rust/elements/internal/generated/AsmOperand.qll a18ddb65ba0de6b61fb73e6a39398a127ccd4180b12fea43398e1e8f3e829ecd 22d2162566bcf18e8bb39eac9c1de0ae563013767ef5efebff6d844cb4038cae lib/codeql/rust/elements/internal/generated/AsmOperand.qll a18ddb65ba0de6b61fb73e6a39398a127ccd4180b12fea43398e1e8f3e829ecd 22d2162566bcf18e8bb39eac9c1de0ae563013767ef5efebff6d844cb4038cae
lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll 6ec1db45e8523331d516263476bbda1006251ce137c2cd324d9b6c6fabf358df b6278d4e605fb5422ab1e563649da793bacf28cd587328f9cc36ca57799510d0 lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll 6ec1db45e8523331d516263476bbda1006251ce137c2cd324d9b6c6fabf358df b6278d4e605fb5422ab1e563649da793bacf28cd587328f9cc36ca57799510d0
@@ -578,7 +578,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e
lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb
lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa
lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126
lib/codeql/rust/elements/internal/generated/ParentChild.qll 3657258593982c34cb5934cf51fe21a0749af3161890b43c20f2b327d89ecf77 83509d01d5735e297057327be7fbb837a4633604cf6641ba34bb4825798187da lib/codeql/rust/elements/internal/generated/ParentChild.qll c7958f4e110f4afb810b06946309bf766305cc4d92c92695ae8f06b3f321ddcd 8150b0550b639cffc7c989c32fc3951fad32ec82ad838f359527a473bdb95a3f
lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb
lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4
lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd
@@ -593,7 +593,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf
lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f
lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9
lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9
lib/codeql/rust/elements/internal/generated/Raw.qll f5b37458fb9c16829da761323deab22b440c3cb5bf915e07ee3eb2315251020e 0198c8d6ac310f107e4685f6dc0bd2eb58800af41ab4ac4c15c42d8d575f4b0a lib/codeql/rust/elements/internal/generated/Raw.qll 7448186873413f4aa7762c990c1c699e3a379280f0260bc76524386aefe567f1 07acbe3eabaa87147757989e8616046fff218669677e7d3d6465fbda639519e1
lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66
lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05
lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b
@@ -619,7 +619,7 @@ lib/codeql/rust/elements/internal/generated/StructFieldList.qll 5da528a51a6a5db9
lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58
lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf
lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37 lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37
lib/codeql/rust/elements/internal/generated/Synth.qll 4390996606c436cb34201d7dba9821a0d775d1707e54fbbe24cbf788d1d1d948 8e8077a387c69f7f5e3bdb2754654625c233283eb39eab33a72bde536f139a16 lib/codeql/rust/elements/internal/generated/Synth.qll 39bd329c2efef8691106070107356da0c336d10cb395aa2129ceb6108db27357 5369b56fe14c1961b38af4288b512dfaf09fc4264efced468af5fc6da403ac04
lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076
lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b
lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf
@@ -665,7 +665,7 @@ test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql b262300235ab5bf4fe
test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql adfcfcdc6ac2a9a4849ea592e37da4221b6279cf2ea1112d32b6c89fda33e85e 7438490536e27b7173dec731f6925531a0e3fa839639c97a53905ba72d7efbe5 test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql adfcfcdc6ac2a9a4849ea592e37da4221b6279cf2ea1112d32b6c89fda33e85e 7438490536e27b7173dec731f6925531a0e3fa839639c97a53905ba72d7efbe5
test/extractor-tests/generated/AsmConst/AsmConst.ql 82f322fc8a01f4ccc86b3ecca86a9515313120764c6a3ac00b968e4441625422 62831f204c5c2d0f155152c661f9b5d4a4b685df6e40693106fbef0379378981 test/extractor-tests/generated/AsmConst/AsmConst.ql 82f322fc8a01f4ccc86b3ecca86a9515313120764c6a3ac00b968e4441625422 62831f204c5c2d0f155152c661f9b5d4a4b685df6e40693106fbef0379378981
test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql 518a739c91481f67b27bfd1989d9dcbada12de54901eb6d598c896cd72f1f5fe 4567661eecf475fb05e13749b9250bcec51056b6db5a6ae7df24b7ba5cfb88c2 test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql 518a739c91481f67b27bfd1989d9dcbada12de54901eb6d598c896cd72f1f5fe 4567661eecf475fb05e13749b9250bcec51056b6db5a6ae7df24b7ba5cfb88c2
test/extractor-tests/generated/AsmExpr/AsmExpr.ql c6c0128b252a13d5acea9a07b3854625aa51ebcce9dd93c11b423c9929d441fb 7618977e43f202af5b7d21b67531c4795bb791abe3cb03ba4077913c430b31d5 test/extractor-tests/generated/AsmExpr/AsmExpr.ql 2ecffe80979c6b49ec84466c913ef6424e0b1f61cf8a8d6f68ac24744a08eb0e 0bd5ee2a93d75c4daa1698613b5d5a462341d53b99e3da8af81ad51fa15a7f7e
test/extractor-tests/generated/AsmLabel/AsmLabel.ql 130bf49dc1f5ae79e3588415b9a4c25dfdcbcac1884db9b2fb802a68e33180e5 c087e47d8953d312488fcc0b1bcbfca02521e3683e2063eaf380d76399bca037 test/extractor-tests/generated/AsmLabel/AsmLabel.ql 130bf49dc1f5ae79e3588415b9a4c25dfdcbcac1884db9b2fb802a68e33180e5 c087e47d8953d312488fcc0b1bcbfca02521e3683e2063eaf380d76399bca037
test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql e866fd4715e78511352bb286c1120cbd52c4d960664d57dd99f0380eb1db7109 081d6a6267a3e251a123099b4c1e7d3c5a3b56e0efe9db7c7db24db1c08b7e0d test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql e866fd4715e78511352bb286c1120cbd52c4d960664d57dd99f0380eb1db7109 081d6a6267a3e251a123099b4c1e7d3c5a3b56e0efe9db7c7db24db1c08b7e0d
test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql fb1eb1f275ad251ba2e0876cf1d097bb33f20d06b0e50f8c01f7c11c71057688 e308567ffd18671cf172853a5c594f0f211d492c7e2fb58be412703d1b342b41 test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql fb1eb1f275ad251ba2e0876cf1d097bb33f20d06b0e50f8c01f7c11c71057688 e308567ffd18671cf172853a5c594f0f211d492c7e2fb58be412703d1b342b41

View File

@@ -7,6 +7,7 @@ private import internal.AsmExprImpl
import codeql.rust.elements.AsmPiece import codeql.rust.elements.AsmPiece
import codeql.rust.elements.Attr import codeql.rust.elements.Attr
import codeql.rust.elements.Expr import codeql.rust.elements.Expr
import codeql.rust.elements.Item
/** /**
* An inline assembly expression. For example: * An inline assembly expression. For example:

View File

@@ -10,6 +10,7 @@ import codeql.rust.elements.AsmPiece
import codeql.rust.elements.Attr import codeql.rust.elements.Attr
import codeql.rust.elements.Expr import codeql.rust.elements.Expr
import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl
import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl
/** /**
* INTERNAL: This module contains the fully generated definition of `AsmExpr` and should not * INTERNAL: This module contains the fully generated definition of `AsmExpr` and should not
@@ -27,7 +28,7 @@ module Generated {
* INTERNAL: Do not reference the `Generated::AsmExpr` class directly. * INTERNAL: Do not reference the `Generated::AsmExpr` class directly.
* Use the subclass `AsmExpr`, where the following predicates are available. * Use the subclass `AsmExpr`, where the following predicates are available.
*/ */
class AsmExpr extends Synth::TAsmExpr, ExprImpl::Expr { class AsmExpr extends Synth::TAsmExpr, ExprImpl::Expr, ItemImpl::Item {
override string getAPrimaryQlClass() { result = "AsmExpr" } override string getAPrimaryQlClass() { result = "AsmExpr" }
/** /**

View File

@@ -863,27 +863,6 @@ private module Impl {
) )
} }
private Element getImmediateChildOfAsmExpr(AsmExpr e, int index, string partialPredicateCall) {
exists(int n, int nAsmPiece, int nAttr, int nTemplate |
n = 0 and
nAsmPiece = n + 1 + max(int i | i = -1 or exists(e.getAsmPiece(i)) | i) and
nAttr = nAsmPiece + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
nTemplate = nAttr + 1 + max(int i | i = -1 or exists(e.getTemplate(i)) | i) and
(
none()
or
result = e.getAsmPiece(index - n) and
partialPredicateCall = "AsmPiece(" + (index - n).toString() + ")"
or
result = e.getAttr(index - nAsmPiece) and
partialPredicateCall = "Attr(" + (index - nAsmPiece).toString() + ")"
or
result = e.getTemplate(index - nAttr) and
partialPredicateCall = "Template(" + (index - nAttr).toString() + ")"
)
)
}
private Element getImmediateChildOfAsmLabel(AsmLabel e, int index, string partialPredicateCall) { private Element getImmediateChildOfAsmLabel(AsmLabel e, int index, string partialPredicateCall) {
exists(int n, int nBlockExpr | exists(int n, int nBlockExpr |
n = 0 and n = 0 and
@@ -2147,6 +2126,32 @@ private module Impl {
) )
} }
private Element getImmediateChildOfAsmExpr(AsmExpr e, int index, string partialPredicateCall) {
exists(int n, int nAttributeMacroExpansion, int nAsmPiece, int nAttr, int nTemplate |
n = 0 and
nAttributeMacroExpansion = n + 1 and
nAsmPiece = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAsmPiece(i)) | i) and
nAttr = nAsmPiece + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
nTemplate = nAttr + 1 + max(int i | i = -1 or exists(e.getTemplate(i)) | i) and
(
none()
or
index = n and
result = e.getAttributeMacroExpansion() and
partialPredicateCall = "AttributeMacroExpansion()"
or
result = e.getAsmPiece(index - nAttributeMacroExpansion) and
partialPredicateCall = "AsmPiece(" + (index - nAttributeMacroExpansion).toString() + ")"
or
result = e.getAttr(index - nAsmPiece) and
partialPredicateCall = "Attr(" + (index - nAsmPiece).toString() + ")"
or
result = e.getTemplate(index - nAttr) and
partialPredicateCall = "Template(" + (index - nAttr).toString() + ")"
)
)
}
private Element getImmediateChildOfBlockExpr(BlockExpr e, int index, string partialPredicateCall) { private Element getImmediateChildOfBlockExpr(BlockExpr e, int index, string partialPredicateCall) {
exists(int n, int nLabel, int nAttr, int nStmtList | exists(int n, int nLabel, int nAttr, int nStmtList |
n = 0 and n = 0 and
@@ -3153,8 +3158,6 @@ private module Impl {
or or
result = getImmediateChildOfAsmConst(e, index, partialAccessor) result = getImmediateChildOfAsmConst(e, index, partialAccessor)
or or
result = getImmediateChildOfAsmExpr(e, index, partialAccessor)
or
result = getImmediateChildOfAsmLabel(e, index, partialAccessor) result = getImmediateChildOfAsmLabel(e, index, partialAccessor)
or or
result = getImmediateChildOfAsmOperandNamed(e, index, partialAccessor) result = getImmediateChildOfAsmOperandNamed(e, index, partialAccessor)
@@ -3309,6 +3312,8 @@ private module Impl {
or or
result = getImmediateChildOfArrayRepeatExpr(e, index, partialAccessor) result = getImmediateChildOfArrayRepeatExpr(e, index, partialAccessor)
or or
result = getImmediateChildOfAsmExpr(e, index, partialAccessor)
or
result = getImmediateChildOfBlockExpr(e, index, partialAccessor) result = getImmediateChildOfBlockExpr(e, index, partialAccessor)
or or
result = getImmediateChildOfCallExpr(e, index, partialAccessor) result = getImmediateChildOfCallExpr(e, index, partialAccessor)

View File

@@ -1521,35 +1521,6 @@ module Raw {
predicate isConst() { asm_const_is_const(this) } predicate isConst() { asm_const_is_const(this) }
} }
/**
* INTERNAL: Do not use.
* An inline assembly expression. For example:
* ```rust
* unsafe {
* #[inline(always)]
* builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b);
* }
* ```
*/
class AsmExpr extends @asm_expr, Expr {
override string toString() { result = "AsmExpr" }
/**
* Gets the `index`th asm piece of this asm expression (0-based).
*/
AsmPiece getAsmPiece(int index) { asm_expr_asm_pieces(this, index, result) }
/**
* Gets the `index`th attr of this asm expression (0-based).
*/
Attr getAttr(int index) { asm_expr_attrs(this, index, result) }
/**
* Gets the `index`th template of this asm expression (0-based).
*/
Expr getTemplate(int index) { asm_expr_templates(this, index, result) }
}
/** /**
* INTERNAL: Do not use. * INTERNAL: Do not use.
* A label in an inline assembly block. * A label in an inline assembly block.
@@ -3592,6 +3563,35 @@ module Raw {
} }
} }
/**
* INTERNAL: Do not use.
* An inline assembly expression. For example:
* ```rust
* unsafe {
* #[inline(always)]
* builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b);
* }
* ```
*/
class AsmExpr extends @asm_expr, Expr, Item {
override string toString() { result = "AsmExpr" }
/**
* Gets the `index`th asm piece of this asm expression (0-based).
*/
AsmPiece getAsmPiece(int index) { asm_expr_asm_pieces(this, index, result) }
/**
* Gets the `index`th attr of this asm expression (0-based).
*/
Attr getAttr(int index) { asm_expr_attrs(this, index, result) }
/**
* Gets the `index`th template of this asm expression (0-based).
*/
Expr getTemplate(int index) { asm_expr_templates(this, index, result) }
}
/** /**
* INTERNAL: Do not use. * INTERNAL: Do not use.
* An associated item in a `Trait` or `Impl`. * An associated item in a `Trait` or `Impl`.

View File

@@ -774,8 +774,8 @@ module Synth {
* INTERNAL: Do not use. * INTERNAL: Do not use.
*/ */
class TItem = class TItem =
TAdt or TAssocItem or TExternBlock or TExternCrate or TExternItem or TImpl or TMacroDef or TAdt or TAsmExpr or TAssocItem or TExternBlock or TExternCrate or TExternItem or TImpl or
TMacroRules or TModule or TTrait or TTraitAlias or TUse; TMacroDef or TMacroRules or TModule or TTrait or TTraitAlias or TUse;
/** /**
* INTERNAL: Do not use. * INTERNAL: Do not use.
@@ -2219,6 +2219,8 @@ module Synth {
TItem convertItemFromRaw(Raw::Element e) { TItem convertItemFromRaw(Raw::Element e) {
result = convertAdtFromRaw(e) result = convertAdtFromRaw(e)
or or
result = convertAsmExprFromRaw(e)
or
result = convertAssocItemFromRaw(e) result = convertAssocItemFromRaw(e)
or or
result = convertExternBlockFromRaw(e) result = convertExternBlockFromRaw(e)
@@ -3803,6 +3805,8 @@ module Synth {
Raw::Element convertItemToRaw(TItem e) { Raw::Element convertItemToRaw(TItem e) {
result = convertAdtToRaw(e) result = convertAdtToRaw(e)
or or
result = convertAsmExprToRaw(e)
or
result = convertAssocItemToRaw(e) result = convertAssocItemToRaw(e)
or or
result = convertExternBlockToRaw(e) result = convertExternBlockToRaw(e)

View File

@@ -1272,31 +1272,6 @@ asm_const_is_const(
int id: @asm_const ref int id: @asm_const ref
); );
asm_exprs(
unique int id: @asm_expr
);
#keyset[id, index]
asm_expr_asm_pieces(
int id: @asm_expr ref,
int index: int ref,
int asm_piece: @asm_piece ref
);
#keyset[id, index]
asm_expr_attrs(
int id: @asm_expr ref,
int index: int ref,
int attr: @attr ref
);
#keyset[id, index]
asm_expr_templates(
int id: @asm_expr ref,
int index: int ref,
int template: @expr ref
);
asm_labels( asm_labels(
unique int id: @asm_label unique int id: @asm_label
); );
@@ -1905,6 +1880,7 @@ infer_type_reprs(
@item = @item =
@adt @adt
| @asm_expr
| @assoc_item | @assoc_item
| @extern_block | @extern_block
| @extern_crate | @extern_crate
@@ -2709,6 +2685,31 @@ adt_derive_macro_expansions(
int derive_macro_expansion: @macro_items ref int derive_macro_expansion: @macro_items ref
); );
asm_exprs(
unique int id: @asm_expr
);
#keyset[id, index]
asm_expr_asm_pieces(
int id: @asm_expr ref,
int index: int ref,
int asm_piece: @asm_piece ref
);
#keyset[id, index]
asm_expr_attrs(
int id: @asm_expr ref,
int index: int ref,
int attr: @attr ref
);
#keyset[id, index]
asm_expr_templates(
int id: @asm_expr ref,
int index: int ref,
int template: @expr ref
);
@assoc_item = @assoc_item =
@const @const
| @function | @function

View File

@@ -4,6 +4,20 @@ import TestUtils
query predicate instances(AsmExpr x) { toBeTested(x) and not x.isUnknown() } query predicate instances(AsmExpr x) { toBeTested(x) and not x.isUnknown() }
query predicate getExtendedCanonicalPath(AsmExpr x, string getExtendedCanonicalPath) {
toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath()
}
query predicate getCrateOrigin(AsmExpr x, string getCrateOrigin) {
toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin()
}
query predicate getAttributeMacroExpansion(AsmExpr x, MacroItems getAttributeMacroExpansion) {
toBeTested(x) and
not x.isUnknown() and
getAttributeMacroExpansion = x.getAttributeMacroExpansion()
}
query predicate getAsmPiece(AsmExpr x, int index, AsmPiece getAsmPiece) { query predicate getAsmPiece(AsmExpr x, int index, AsmPiece getAsmPiece) {
toBeTested(x) and not x.isUnknown() and getAsmPiece = x.getAsmPiece(index) toBeTested(x) and not x.isUnknown() and getAsmPiece = x.getAsmPiece(index)
} }

2
rust/schema/ast.py generated
View File

@@ -69,7 +69,7 @@ class AsmConst(AsmOperand, ):
class AsmDirSpec(AstNode, ): class AsmDirSpec(AstNode, ):
pass pass
class AsmExpr(Expr, ): class AsmExpr(Expr, Item, ):
asm_pieces: list["AsmPiece"] | child asm_pieces: list["AsmPiece"] | child
attrs: list["Attr"] | child attrs: list["Attr"] | child
template: list["Expr"] | child template: list["Expr"] | child