Skip to content

Commit 59ec805

Browse files
author
Daniel Kroening
committed
more work on environment setup
1 parent a9f9f7d commit 59ec805

File tree

4 files changed

+62
-67
lines changed

4 files changed

+62
-67
lines changed

regression/cbmc-java/environment1/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ public class Main
22
{
33
public static void main(String[] args)
44
{
5-
assert args!=null;
5+
assert args!=null; // should pass
66
assert args.length==0; // should fail
77
}
88
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
KNOWNBUG
1+
CORE
22
Main.class
33
--all-properties
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[assertion.1\] assertion at file Main.java line 5: PASSED$
7-
^\[assertion.2\] assertion at file Main.java line 6: FAILED$
6+
^\[assertion.1\] assertion at file Main.java line 5: SUCCESS$
7+
^\[assertion.2\] assertion at file Main.java line 6: FAILURE$
88
--
99
^warning: ignoring

src/java_bytecode/java_bytecode_convert.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,7 @@ void java_bytecode_convertt::add_array_types()
15921592
struct_typet struct_type;
15931593
// we have the base class, java.lang.Object, length and data
15941594
// of appropriate type
1595+
struct_type.set_tag(symbol_type.get_identifier());
15951596
struct_type.components().resize(3);
15961597
struct_type.components()[0].set_name("@java.lang.Object");
15971598
struct_type.components()[0].type()=symbol_typet("java::java.lang.Object");

src/java_bytecode/java_entry_point.cpp

Lines changed: 57 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -93,66 +93,10 @@ void gen_nondet_init(
9393
irep_idt class_identifier)
9494
{
9595
const typet &type=ns.follow(expr.type());
96-
97-
if(type.id()==ID_struct)
98-
{
99-
typedef struct_typet::componentt componentt;
100-
typedef struct_typet::componentst componentst;
101-
102-
const struct_typet &struct_type=to_struct_type(type);
103-
const irep_idt struct_tag=struct_type.get_tag();
104-
105-
componentst components=struct_type.components();
106-
107-
if(!is_sub)
108-
class_identifier=struct_tag;
109-
110-
recursion_set.insert(struct_tag);
111-
assert(!recursion_set.empty());
112-
113-
for(componentst::const_iterator it=components.begin();
114-
it!=components.end(); it++)
115-
{
116-
const componentt &component=*it;
117-
const typet &component_type=component.type();
118-
irep_idt name=component.get_name();
119-
120-
member_exprt me(expr, name, component_type);
121-
122-
if(name=="@class_identifier")
123-
{
124-
constant_exprt ci(class_identifier, string_typet());
125-
126-
code_assignt code(me, ci);
127-
init_code.copy_to_operands(code);
128-
}
129-
else
130-
{
131-
irep_idt new_class_identifier;
132-
assert(!name.empty());
133-
134-
is_sub = name[0]=='@';
135-
136-
gen_nondet_init(
137-
me, init_code, ns, recursion_set, is_sub, class_identifier);
138-
}
139-
}
140-
141-
recursion_set.erase(struct_tag);
142-
}
143-
else if(type.id()!=ID_pointer)
144-
{
145-
assert(type.id()!= ID_struct);
146-
147-
side_effect_expr_nondett se=side_effect_expr_nondett(type);
148-
149-
code_assignt code(expr, se);
150-
init_code.copy_to_operands(code);
151-
}
152-
else
96+
97+
if(type.id()==ID_pointer)
15398
{
154-
assert(type.id()==ID_pointer);
155-
99+
#if 0
156100
// dereferenced type
157101
const pointer_typet &pointer_type=to_pointer_type(type);
158102
const typet &subtype=ns.follow(pointer_type.subtype());
@@ -198,6 +142,55 @@ void gen_nondet_init(
198142
code_assignt code(expr, null_pointer_expr);
199143
init_code.copy_to_operands(code);
200144
}
145+
#endif
146+
}
147+
else if(type.id()==ID_struct)
148+
{
149+
typedef struct_typet::componentst componentst;
150+
151+
const struct_typet &struct_type=to_struct_type(type);
152+
const irep_idt struct_tag=struct_type.get_tag();
153+
154+
const componentst &components=struct_type.components();
155+
156+
recursion_set.insert(struct_tag);
157+
assert(!recursion_set.empty());
158+
159+
for(const auto & component : components)
160+
{
161+
const typet &component_type=component.type();
162+
irep_idt name=component.get_name();
163+
164+
member_exprt me(expr, name, component_type);
165+
166+
if(name=="@class_identifier")
167+
{
168+
constant_exprt ci(class_identifier, string_typet());
169+
170+
code_assignt code(me, ci);
171+
init_code.copy_to_operands(code);
172+
}
173+
else
174+
{
175+
assert(!name.empty());
176+
177+
bool _is_sub = name[0]=='@';
178+
irep_idt _class_identifier=
179+
_is_sub?(class_identifier.empty()?struct_tag:class_identifier):"";
180+
181+
gen_nondet_init(
182+
me, init_code, ns, recursion_set, _is_sub, _class_identifier);
183+
}
184+
}
185+
186+
recursion_set.erase(struct_tag);
187+
}
188+
else
189+
{
190+
side_effect_expr_nondett se=side_effect_expr_nondett(type);
191+
192+
code_assignt code(expr, se);
193+
init_code.copy_to_operands(code);
201194
}
202195
}
203196
}
@@ -279,15 +272,16 @@ exprt gen_argument(
279272
if(type.id()==ID_pointer)
280273
{
281274
symbolt &aux_symbol=new_tmp_symbol(symbol_table);
282-
aux_symbol.type=type;
275+
aux_symbol.type=type.subtype();
283276
aux_symbol.is_static_lifetime=true;
284277

285-
exprt object_this_ptr=aux_symbol.symbol_expr();
278+
exprt object=aux_symbol.symbol_expr();
286279

287280
const namespacet ns(symbol_table);
288-
gen_nondet_init(object_this_ptr, init_code, ns);
281+
gen_nondet_init(object, init_code, ns);
289282

290-
return side_effect_expr_nondett(type);
283+
// todo: need to pass null, possibly
284+
return address_of_exprt(object);
291285
}
292286
else if(type.id()==ID_c_bool)
293287
{

0 commit comments

Comments
 (0)