X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=format_check.c;h=f572d145a4595c644ce64bf1db395b0cec75525e;hb=ac8825ce886206a4d8b44e74c55b206328da3422;hp=2e85c0bddde9a7d3a06c4d12a84eeb2190c43c9c;hpb=b059877708b2c34e6926702cac65f0c0b54683e8;p=cparser diff --git a/format_check.c b/format_check.c index 2e85c0b..f572d14 100644 --- a/format_check.c +++ b/format_check.c @@ -145,7 +145,8 @@ static bool atend(vchar_t *self) { /** * Check printf-style format. */ -static void check_format_arguments(const call_argument_t *arg, unsigned idx_fmt, unsigned idx_param) +static void check_format_arguments(const call_argument_t *arg, unsigned idx_fmt, + unsigned idx_param) { const call_argument_t *fmt_arg; unsigned idx = 0; @@ -177,7 +178,7 @@ static void check_format_arguments(const call_argument_t *arg, unsigned idx_fmt, return; } /* find the real args */ - for(; idx < idx_fmt; ++idx) + for(; idx < idx_param; ++idx) arg = arg->next; const source_position_t *pos = &fmt_expr->base.source_position; @@ -355,7 +356,7 @@ break_fmt_flags: break; } - const type_t *expected_type; + type_t *expected_type; type_qualifiers_t expected_qual = TYPE_QUALIFIER_NONE; format_flags_t allowed_flags; switch (fmt) { @@ -520,11 +521,12 @@ eval_fmt_mod_unsigned: } { /* create a scope here to prevent warning about the jump to next_arg */ - type_t *const arg_type = arg->expression->base.type; - if (is_type_pointer(expected_type)) { + type_t *const arg_type = arg->expression->base.type; + type_t *const expected_type_skip = skip_typeref(expected_type); + if (is_type_pointer(expected_type_skip)) { type_t *const arg_skip = skip_typeref(arg_type); if (is_type_pointer(arg_skip)) { - type_t *const exp_to = skip_typeref(expected_type->pointer.points_to); + type_t *const exp_to = skip_typeref(expected_type_skip->pointer.points_to); type_t *const arg_to = skip_typeref(arg_skip->pointer.points_to); if ((arg_to->base.qualifiers & ~expected_qual) == 0 && get_unqualified_type(arg_to) == exp_to) { @@ -532,7 +534,7 @@ eval_fmt_mod_unsigned: } } } else { - if (get_unqualified_type(skip_typeref(arg_type)) == expected_type) { + if (get_unqualified_type(skip_typeref(arg_type)) == expected_type_skip) { goto next_arg; } }