Skip to content

Commit 0a7661c

Browse files
celinvaltedinski
authored andcommitted
Add support to typedef in cprover bindings crate (rust-lang#1035)
* Add support to typedef in cprover bindings crate * Address comments + more tests
1 parent 5438ae9 commit 0a7661c

File tree

7 files changed

+299
-85
lines changed

7 files changed

+299
-85
lines changed

cprover_bindings/src/goto_program/expr.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,8 @@ impl Expr {
303303
/// that don't appear in the standard, like `bool`
304304
/// https://docs.microsoft.com/en-us/cpp/c-language/type-cast-conversions?view=msvc-160
305305
pub fn can_cast_from(source: &Type, target: &Type) -> bool {
306+
let source = source.unwrap_typedef();
307+
let target = target.unwrap_typedef();
306308
if source == target {
307309
true
308310
} else if target.is_bool() {

cprover_bindings/src/goto_program/symtab_transformer/identity_transformer.rs

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -38,39 +38,14 @@ impl Transformer for IdentityTransformer {
3838
mod tests {
3939
use super::{
4040
super::super::{
41-
super::{MachineModel, RoundingMode},
4241
DatatypeComponent, Expr, Location, Stmt, SwitchCase, Symbol, SymbolTable, Type,
4342
},
4443
IdentityTransformer,
4544
};
46-
fn default_machine_model() -> MachineModel {
47-
MachineModel::new(
48-
1,
49-
"x86_64",
50-
8,
51-
false,
52-
8,
53-
64,
54-
32,
55-
32,
56-
false,
57-
128,
58-
64,
59-
64,
60-
4,
61-
true,
62-
64,
63-
RoundingMode::ToNearest,
64-
16,
65-
32,
66-
false,
67-
32,
68-
32,
69-
)
70-
}
45+
use crate::machine_model::test_util::machine_model_test_stub;
7146

7247
fn empty_symtab() -> SymbolTable {
73-
SymbolTable::new(default_machine_model())
48+
SymbolTable::new(machine_model_test_stub())
7449
}
7550

7651
fn assert_transform_eq(original: SymbolTable) {

cprover_bindings/src/goto_program/symtab_transformer/transformer.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ pub trait Transformer: Sized {
5858
Type::Signedbv { width } => self.transform_type_signedbv(width),
5959
Type::Struct { tag, components } => self.transform_type_struct(*tag, components),
6060
Type::StructTag(tag) => self.transform_type_struct_tag(*tag),
61+
Type::TypeDef { name: tag, typ } => self.transform_type_def(*tag, typ),
6162
Type::Union { tag, components } => self.transform_type_union(*tag, components),
6263
Type::UnionTag(tag) => self.transform_type_union_tag(*tag),
6364
Type::Unsignedbv { width } => self.transform_type_unsignedbv(width),
@@ -232,6 +233,12 @@ pub trait Transformer: Sized {
232233
Type::vector(transformed_typ, *size)
233234
}
234235

236+
/// Transforms a type def (`typedef typ tag`)
237+
fn transform_type_def(&mut self, tag: InternedString, typ: &Box<Type>) -> Type {
238+
let transformed_typ = self.transform_type(typ.as_ref());
239+
transformed_typ.to_typedef(tag)
240+
}
241+
235242
/// Perform recursive descent on a `Expr` data structure.
236243
/// Extracts the variant's field data, and passes them into
237244
/// the corresponding expr transformer method along with the expr type.

0 commit comments

Comments
 (0)