Add fields for OffsetOf

This commit is contained in:
Arthur Baars
2024-09-06 18:17:15 +02:00
parent 75113367c9
commit 69b05e835c
6 changed files with 59 additions and 6 deletions

6
rust/.generated.list generated
View File

@@ -167,16 +167,16 @@ ql/lib/codeql/rust/generated/MethodCall.qll 1d7afd5e8795b89f3cd20569fe7e0b7fd339
ql/lib/codeql/rust/generated/MissingExpr.qll 90b164567620c88b8e258fa229633365400abeafa4f4b0fcd1c856efc2f9b206 90b164567620c88b8e258fa229633365400abeafa4f4b0fcd1c856efc2f9b206
ql/lib/codeql/rust/generated/MissingPat.qll 0d8034cee20bacf07ebb9337c797f53a25686a149f163f801916cd6ec5484710 0d8034cee20bacf07ebb9337c797f53a25686a149f163f801916cd6ec5484710
ql/lib/codeql/rust/generated/Module.qll 2a931a4f2cdb2fee00ed83af045ea63d36b7dbd708e58c30445b5610feaae333 cd62add5c31a509f965aa294f44a1607ec7c62e3a9e3fe9ee063b3c814f4eb62
ql/lib/codeql/rust/generated/OffsetOf.qll 8b3778c32d2e7c85491e7a85c9c6337de822e946655b9af69a4281838787f291 8b3778c32d2e7c85491e7a85c9c6337de822e946655b9af69a4281838787f291
ql/lib/codeql/rust/generated/OffsetOf.qll c5c7218a0dfa6636a4b3e4218969638cc267db94a966b19fbced0ba6f85dbd0e 6c8fac4cd343073ee0ed48498deb7faa65a876776d9ca0a98e51350fead5c8ac
ql/lib/codeql/rust/generated/OrPat.qll f8fe5c7b83a08dabcc530484a696274930040ea13501ae20f1426faeec67bcf0 f3adb3148890531b698570a48740335983a5e81977ba4ac651778f940f184398
ql/lib/codeql/rust/generated/ParentChild.qll 0a110516379dd64cb1275fb639a47e0268b95cad795a76dfb3eb4a6b5bfc7bcc b9395225775cb390d959f617e61a42b39a1a2a201656bdc26315e27f743e8736
ql/lib/codeql/rust/generated/ParentChild.qll 345b5b9fa164fce5886cd06e0739881b28da64870e3b544f8b59556aed85e63d b9395225775cb390d959f617e61a42b39a1a2a201656bdc26315e27f743e8736
ql/lib/codeql/rust/generated/Pat.qll fe1c72856442dbab5655eff93f86c2cbce8d69d9fa1f99a0f9203061ea1112a4 d85d86e8b6c48df733589d186f610b1cd9086629180701e017774bddc62402c7
ql/lib/codeql/rust/generated/Path.qll ca8878cd96c31ad9238a1d52487e094863d5abba825d189e0ea6f8d674194b75 ca8878cd96c31ad9238a1d52487e094863d5abba825d189e0ea6f8d674194b75
ql/lib/codeql/rust/generated/PathPat.qll 5869c513e1d0cb689589e2c72f3feda18b0f246d9b03304d8c0f9237f0300524 5869c513e1d0cb689589e2c72f3feda18b0f246d9b03304d8c0f9237f0300524
ql/lib/codeql/rust/generated/PureSynthConstructors.qll 5eb1fc4f6a04172c34ae31e4931e4bf1f8b72fbe414c5f644731a45372d13573 5eb1fc4f6a04172c34ae31e4931e4bf1f8b72fbe414c5f644731a45372d13573
ql/lib/codeql/rust/generated/Range.qll 6278d78c7fba390f51b107892262f9c679c8a31695861a64268e9b74c9575e46 2cb49b0d5d4281c10bdd7ddf187f144cd8490cd792218e977c4108ba98883e06
ql/lib/codeql/rust/generated/RangePat.qll 6ec95f6cb9c4bd93b38990bb1e3b89b526624305ac6ee7b94e6fb0a2f3db28fc 0e193f3816a7587d5103dba421bc2bf22b869522353d4e3f43d49a792eac6cf4
ql/lib/codeql/rust/generated/Raw.qll d1b5db6d3325700e2d5071e5295d1a5b239f0ab157320009ecd9add1313de26e e70f9125f2712932797848acb1073ea454ccbd66626ce22303773c569f103673
ql/lib/codeql/rust/generated/Raw.qll 2836b68a614049752714f4929eb5e978383c5dc8bbe9d2fa67c7f0fbfca95eda 0237eedfa08d195d411e1e98f4bfa0fd9bebcf7765c49ca50c47a4d3fad1271f
ql/lib/codeql/rust/generated/RecordLit.qll ae3c644237abab89e0443dfcf584906a9714792be755ce3f9fcdae5958024243 ae3c644237abab89e0443dfcf584906a9714792be755ce3f9fcdae5958024243
ql/lib/codeql/rust/generated/RecordPat.qll 8c206be87b5738c6107db72cbe4d97a67e55060e92c0a3148fad84092d70f5e7 8c206be87b5738c6107db72cbe4d97a67e55060e92c0a3148fad84092d70f5e7
ql/lib/codeql/rust/generated/Ref.qll d26cc357f65fb51a5c07863406f732debe3dc02542b415b281ec582efa08a362 9d62dd9a99e158abc7b42c4e011a5dd0db4dfbce25ab6fe5c600354c18a236bd

View File

@@ -814,6 +814,8 @@ impl TrapEntry for Module {
pub struct OffsetOf {
pub id: TrapId,
pub location: Option<trap::Label>,
pub container: trap::Label,
pub fields: Vec<String>,
}
impl TrapEntry for OffsetOf {
@@ -822,10 +824,13 @@ impl TrapEntry for OffsetOf {
}
fn emit(self, id: trap::Label, out: &mut trap::Writer) {
out.add_tuple("offset_ofs", vec![trap::Arg::Label(id)]);
out.add_tuple("offset_ofs", vec![trap::Arg::Label(id), self.container.into()]);
if let Some(v) = self.location {
out.add_tuple("locatable_locations", vec![trap::Arg::Label(id), v.into()]);
}
for (i, &v) in self.fields.iter().enumerate() {
out.add_tuple("offset_of_fields", vec![trap::Arg::Label(id), i.into(), v.into()]);
}
}
}

View File

@@ -7,6 +7,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.Expr
import codeql.rust.elements.TypeRef
/**
* INTERNAL: This module contains the fully generated definition of `OffsetOf` and should not
@@ -19,5 +20,32 @@ module Generated {
*/
class OffsetOf extends Synth::TOffsetOf, Expr {
override string getAPrimaryQlClass() { result = "OffsetOf" }
/**
* Gets the container of this offset of.
*/
TypeRef getContainer() {
result =
Synth::convertTypeRefFromRaw(Synth::convertOffsetOfToRaw(this)
.(Raw::OffsetOf)
.getContainer())
}
/**
* Gets the `index`th field of this offset of (0-based).
*/
string getField(int index) {
result = Synth::convertOffsetOfToRaw(this).(Raw::OffsetOf).getField(index)
}
/**
* Gets any of the fields of this offset of.
*/
final string getAField() { result = this.getField(_) }
/**
* Gets the number of fields of this offset of.
*/
final int getNumberOfFields() { result = count(int i | exists(this.getField(i))) }
}
}

View File

@@ -632,6 +632,16 @@ module Raw {
*/
class OffsetOf extends @offset_of, Expr {
override string toString() { result = "OffsetOf" }
/**
* Gets the container of this offset of.
*/
TypeRef getContainer() { offset_ofs(this, result) }
/**
* Gets the `index`th field of this offset of (0-based).
*/
string getField(int index) { offset_of_fields(this, index, result) }
}
/**

View File

@@ -456,7 +456,15 @@ module_declarations(
);
offset_ofs(
unique int id: @offset_of
unique int id: @offset_of,
int container: @type_ref ref
);
#keyset[id, index]
offset_of_fields(
int id: @offset_of ref,
int index: int ref,
string field: string ref
);
or_pats(

View File

@@ -437,7 +437,9 @@ class Underscore(Expr):
class OffsetOf(Expr):
pass
container: TypeRef
fields: list[string]
# InlineAsm(InlineAsm),