aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2022-05-31 15:27:37 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2022-05-31 15:52:42 +0200
commit187285b32ea71c25419a09724d9fe5f1b46aab2e (patch)
tree4cc77121deaa91575ab75bb45a3635568f63cf71
parent698360ca020e8ce4bc84eb44233dba9dbc9b598c (diff)
downloadsparse-187285b32ea71c25419a09724d9fe5f1b46aab2e.tar.gz
cast_value: remove error-prone redundant argument
The last two arguments of cast_value() are the old expression and the oldtype which suggest that this oldtype can be distinct from the type of the old expression. But this is not the case because internally the type used to retrieve the value of the expression is the type of the expression itself (old->ctype) the type which is used and the two types must be the same (or at least be equivalent). So, remove the error-prone last argument and always us the type of the expression itself. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--expand.c6
-rw-r--r--expression.c2
-rw-r--r--expression.h3
-rw-r--r--parse.c2
4 files changed, 6 insertions, 7 deletions
diff --git a/expand.c b/expand.c
index fb11d77a..f14e7181 100644
--- a/expand.c
+++ b/expand.c
@@ -94,9 +94,9 @@ static long long get_longlong(struct expression *expr)
return (value & andmask) | ormask;
}
-void cast_value(struct expression *expr, struct symbol *newtype,
- struct expression *old, struct symbol *oldtype)
+void cast_value(struct expression *expr, struct symbol *newtype, struct expression *old)
{
+ struct symbol *oldtype = old->ctype;
int old_size = oldtype->bit_size;
int new_size = newtype->bit_size;
long long value, mask, signmask;
@@ -876,7 +876,7 @@ static int expand_cast(struct expression *expr)
/* Simplify normal integer casts.. */
if (target->type == EXPR_VALUE || target->type == EXPR_FVALUE) {
- cast_value(expr, expr->ctype, target, target->ctype);
+ cast_value(expr, expr->ctype, target);
return 0;
}
return cost + 1;
diff --git a/expression.c b/expression.c
index bead007f..727e7056 100644
--- a/expression.c
+++ b/expression.c
@@ -432,7 +432,7 @@ struct token *primary_expression(struct token *token, struct expression **tree)
// TODO: handle 'u8', 'u' & 'U' prefixes.
if (token_type(token) < TOKEN_WIDE_CHAR) {
expr->ctype = &char_ctype;
- cast_value(expr, &int_ctype, expr, expr->ctype);
+ cast_value(expr, &int_ctype, expr);
} else {
expr->ctype = wchar_ctype;
}
diff --git a/expression.h b/expression.h
index f733c076..8bf40d32 100644
--- a/expression.h
+++ b/expression.h
@@ -337,7 +337,6 @@ struct token *compound_statement(struct token *, struct statement *);
#define constant_expression(token,tree) conditional_expression(token, tree)
/* Cast folding of constant values.. */
-void cast_value(struct expression *expr, struct symbol *newtype,
- struct expression *old, struct symbol *oldtype);
+void cast_value(struct expression *expr, struct symbol *newtype, struct expression *old);
#endif
diff --git a/parse.c b/parse.c
index 0e51b3a3..53342c78 100644
--- a/parse.c
+++ b/parse.c
@@ -903,7 +903,7 @@ static void cast_enum_list(struct symbol_list *list, struct symbol *base_type)
expr->ctype = &int_ctype;
continue;
}
- cast_value(expr, base_type, expr, ctype);
+ cast_value(expr, base_type, expr);
} END_FOR_EACH_PTR(sym);
}