@@ -9,11 +9,16 @@ Author: Diffblue Ltd
99#include < testing-utils/use_catch.h>
1010
1111#include < util/arith_tools.h>
12+ #include < util/c_types.h>
13+ #include < util/config.h>
1214#include < util/mathematical_types.h>
15+ #include < util/namespace.h>
16+ #include < util/simplify_expr.h>
1317#include < util/std_expr.h>
1418#include < util/std_types.h>
19+ #include < util/symbol_table.h>
1520
16- TEST_CASE (" for a division expression..." )
21+ TEST_CASE (" for a division expression..." , " [unit][util][std_expr] " )
1722{
1823 auto dividend = from_integer (10 , integer_typet ());
1924 auto divisor = from_integer (5 , integer_typet ());
@@ -30,3 +35,42 @@ TEST_CASE("for a division expression...")
3035 REQUIRE (div.type () == integer_typet ());
3136 }
3237}
38+
39+ TEST_CASE (" object descriptor expression" , " [unit][util][std_expr]" )
40+ {
41+ config.ansi_c .set_LP64 ();
42+
43+ symbol_tablet symbol_table;
44+ const namespacet ns (symbol_table);
45+
46+ array_typet array_type (signed_int_type (), from_integer (2 , size_type ()));
47+ struct_typet struct_type ({{" foo" , array_type}});
48+
49+ SECTION (" object descriptors of index expressions" )
50+ {
51+ const symbol_exprt s (" array" , array_type);
52+ // s[1]
53+ const index_exprt index (s, from_integer (1 , index_type ()));
54+
55+ object_descriptor_exprt ode;
56+ ode.build (index, ns);
57+ REQUIRE (ode.root_object () == s);
58+ // in LP64 a signed int is 4 bytes
59+ REQUIRE (simplify_expr (ode.offset (), ns) == from_integer (4 , index_type ()));
60+ }
61+
62+ SECTION (" object descriptors of member expressions" )
63+ {
64+ const symbol_exprt s (" struct" , struct_type);
65+ // s.foo
66+ const member_exprt member (s, " foo" , array_type);
67+ // s.foo[1]
68+ const index_exprt index (member, from_integer (1 , index_type ()));
69+
70+ object_descriptor_exprt ode;
71+ ode.build (index, ns);
72+ REQUIRE (ode.root_object () == s);
73+ // in LP64 a signed int is 4 bytes
74+ REQUIRE (simplify_expr (ode.offset (), ns) == from_integer (4 , index_type ()));
75+ }
76+ }
0 commit comments