@@ -1935,8 +1935,7 @@ static struct symbol *evaluate_postop(struct expression *expr)
if (multiply) {
evaluate_assign_to(op, op->ctype);
expr->op_value = multiply;
- expr->ctype = ctype;
- return ctype;
+ return expr->ctype = op->ctype;
}
expression_error(expr, "bad argument type for ++/--");
@@ -10,7 +10,6 @@ static void test_volatile(void)
/*
* check-name: unqual-postop
* check-command: sparse -Wno-declaration-after-statement $file
- * check-known-to-fail
*
* check-error-start
eval/unqual-postop.c:6:40: warning: incorrect type in assignment (different modifiers)
Increment and decrement expressions are not subjected to lvalue-conversion and thus should *not* drop qualifiers. However, while the lvalue-conversion is not done, the qualifiers are dropped because the type used for the result is the one returned by classify_type() which always return the base type. Fix this by using the type of the operand as the result type. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- evaluate.c | 3 +-- validation/eval/unqual-postop.c | 1 - 2 files changed, 1 insertion(+), 3 deletions(-)