Skip to content

Commit 0ee4178

Browse files
authored
Merge pull request #2729 from tautschnig/add-sub-conflict
Use pointer difference type when adding to pointer
2 parents f5aff56 + 1fc3118 commit 0ee4178

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

regression/cbmc/member1/main.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
struct B
2+
{
3+
int bi;
4+
int *c;
5+
};
6+
7+
struct A
8+
{
9+
int ai;
10+
struct B b;
11+
};
12+
13+
int main()
14+
{
15+
struct A *a;
16+
if((&a->b)->c == 0)
17+
return 1;
18+
return 0;
19+
}

regression/cbmc/member1/test.desc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
main.c
3+
--pointer-check
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
--
8+
^warning: ignoring
9+
add/sub with mixed types

src/analyses/goto_check.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1414,7 +1414,10 @@ void goto_checkt::check_rec(const exprt &expr, guardt &guard, bool address)
14141414
deref.pointer(), pointer_type(char_type()));
14151415

14161416
const exprt new_address = typecast_exprt(
1417-
plus_exprt(char_pointer, member_offset), char_pointer.type());
1417+
plus_exprt(
1418+
char_pointer,
1419+
typecast_exprt::conditional_cast(member_offset, pointer_diff_type())),
1420+
char_pointer.type());
14181421

14191422
const exprt new_address_casted =
14201423
typecast_exprt::conditional_cast(new_address, new_pointer_type);

0 commit comments

Comments
 (0)