Skip to content

Commit a2a5672

Browse files
author
Daniel Kroening
authored
Merge pull request #4741 from tautschnig/bitnand
C front-end: Typecheck bitnand
2 parents 3a2aa7d + 8ab8f91 commit a2a5672

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

regression/cbmc/atomic_fetch_X-1/main.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,10 @@ int main()
1010
assert(result == x_before);
1111
assert(x == x_before + v);
1212

13+
x_before = x;
14+
result = __atomic_fetch_nand(p, x, 0);
15+
assert(result == x_before);
16+
assert(x == ~x_before);
17+
1318
return 0;
1419
}

src/ansi-c/c_typecheck_expr.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,13 @@ void c_typecheck_baset::typecheck_expr_main(exprt &expr)
207207
typecheck_expr_sizeof(expr);
208208
else if(expr.id()==ID_alignof)
209209
typecheck_expr_alignof(expr);
210-
else if(expr.id()==ID_plus || expr.id()==ID_minus ||
211-
expr.id()==ID_mult || expr.id()==ID_div ||
212-
expr.id()==ID_mod ||
213-
expr.id()==ID_bitand || expr.id()==ID_bitxor || expr.id()==ID_bitor)
210+
else if(
211+
expr.id() == ID_plus || expr.id() == ID_minus || expr.id() == ID_mult ||
212+
expr.id() == ID_div || expr.id() == ID_mod || expr.id() == ID_bitand ||
213+
expr.id() == ID_bitxor || expr.id() == ID_bitor || expr.id() == ID_bitnand)
214+
{
214215
typecheck_expr_binary_arithmetic(expr);
216+
}
215217
else if(expr.id()==ID_shl || expr.id()==ID_shr)
216218
typecheck_expr_shifts(to_shift_expr(expr));
217219
else if(expr.id()==ID_comma)
@@ -3136,9 +3138,9 @@ void c_typecheck_baset::typecheck_expr_binary_arithmetic(exprt &expr)
31363138
}
31373139
}
31383140
}
3139-
else if(expr.id()==ID_bitand ||
3140-
expr.id()==ID_bitxor ||
3141-
expr.id()==ID_bitor)
3141+
else if(
3142+
expr.id() == ID_bitand || expr.id() == ID_bitnand ||
3143+
expr.id() == ID_bitxor || expr.id() == ID_bitor)
31423144
{
31433145
if(type0==type1)
31443146
{
@@ -3151,6 +3153,8 @@ void c_typecheck_baset::typecheck_expr_binary_arithmetic(exprt &expr)
31513153
{
31523154
if(expr.id()==ID_bitand)
31533155
expr.id(ID_and);
3156+
else if(expr.id() == ID_bitnand)
3157+
expr.id(ID_nand);
31543158
else if(expr.id()==ID_bitor)
31553159
expr.id(ID_or);
31563160
else if(expr.id()==ID_bitxor)

0 commit comments

Comments
 (0)