Also allow #no_bounds_check on an expression #499

This commit is contained in:
gingerBill
2019-12-15 11:41:21 +00:00
parent 58d4d424c6
commit 4ba579bc25
7 changed files with 105 additions and 56 deletions
+12 -13
View File
@@ -335,27 +335,26 @@ Type *check_assignment_variable(CheckerContext *ctx, Operand *lhs, Operand *rhs)
void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags);
void check_stmt(CheckerContext *ctx, Ast *node, u32 flags) {
u32 prev_stmt_state_flags = ctx->stmt_state_flags;
u32 prev_state_flags = ctx->state_flags;
if (node->stmt_state_flags != 0) {
u32 in = node->stmt_state_flags;
u32 out = ctx->stmt_state_flags;
if (node->state_flags != 0) {
u32 in = node->state_flags;
u32 out = ctx->state_flags;
if (in & StmtStateFlag_no_bounds_check) {
out |= StmtStateFlag_no_bounds_check;
out &= ~StmtStateFlag_bounds_check;
} else {
// if (in & StmtStateFlag_bounds_check) {
out |= StmtStateFlag_bounds_check;
out &= ~StmtStateFlag_no_bounds_check;
if (in & StateFlag_no_bounds_check) {
out |= StateFlag_no_bounds_check;
out &= ~StateFlag_bounds_check;
} else if (in & StateFlag_bounds_check) {
out |= StateFlag_bounds_check;
out &= ~StateFlag_no_bounds_check;
}
ctx->stmt_state_flags = out;
ctx->state_flags = out;
}
check_stmt_internal(ctx, node, flags);
ctx->stmt_state_flags = prev_stmt_state_flags;
ctx->state_flags = prev_state_flags;
}