@@ -1003,8 +1003,7 @@ void goto_checkt::pointer_validity_check(
10031003 guard);
10041004 }
10051005
1006- if (flags.is_unknown () ||
1007- flags.is_integer_address ())
1006+ if (flags.is_unknown ())
10081007 add_guarded_claim (
10091008 or_exprt (allocs, not_exprt (invalid_pointer (pointer))),
10101009 " dereference failure: pointer invalid" ,
@@ -1023,8 +1022,7 @@ void goto_checkt::pointer_validity_check(
10231022 guard);
10241023
10251024 if (flags.is_unknown () ||
1026- flags.is_dynamic_heap () ||
1027- flags.is_integer_address ())
1025+ flags.is_dynamic_heap ())
10281026 add_guarded_claim (
10291027 or_exprt (allocs, not_exprt (deallocated (pointer, ns))),
10301028 " dereference failure: deallocated dynamic object" ,
@@ -1034,8 +1032,7 @@ void goto_checkt::pointer_validity_check(
10341032 guard);
10351033
10361034 if (flags.is_unknown () ||
1037- flags.is_dynamic_local () ||
1038- flags.is_integer_address ())
1035+ flags.is_dynamic_local ())
10391036 add_guarded_claim (
10401037 or_exprt (allocs, not_exprt (dead_object (pointer, ns))),
10411038 " dereference failure: dead object" ,
@@ -1045,8 +1042,7 @@ void goto_checkt::pointer_validity_check(
10451042 guard);
10461043
10471044 if (flags.is_unknown () ||
1048- flags.is_dynamic_heap () ||
1049- flags.is_integer_address ())
1045+ flags.is_dynamic_heap ())
10501046 {
10511047 const or_exprt dynamic_bounds (
10521048 dynamic_object_lower_bound (pointer, ns, access_lb),
@@ -1067,8 +1063,7 @@ void goto_checkt::pointer_validity_check(
10671063
10681064 if (flags.is_unknown () ||
10691065 flags.is_dynamic_local () ||
1070- flags.is_static_lifetime () ||
1071- flags.is_integer_address ())
1066+ flags.is_static_lifetime ())
10721067 {
10731068 const or_exprt object_bounds (
10741069 object_lower_bound (pointer, ns, access_lb),
@@ -1082,6 +1077,18 @@ void goto_checkt::pointer_validity_check(
10821077 expr,
10831078 guard);
10841079 }
1080+
1081+ if (flags.is_unknown () ||
1082+ flags.is_integer_address ())
1083+ {
1084+ add_guarded_claim (
1085+ implies_exprt (integer_address (pointer), allocs),
1086+ " dereference failure: invalid integer address" ,
1087+ " pointer dereference" ,
1088+ expr.find_source_location (),
1089+ expr,
1090+ guard);
1091+ }
10851092 }
10861093}
10871094
0 commit comments