aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-05-29 11:35:25 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:01:54 -0700
commit51924e9a562a79859a4c9129d7e2b59fe5fc1cee (patch)
treef362143b6c7c402fb32cb5635ea1bcc71afb0d1f
parent1604e925e5a093019b6a2f6ba4c64934f970c21c (diff)
downloadsparse-dev-51924e9a562a79859a4c9129d7e2b59fe5fc1cee.tar.gz
Degenerate the final expression of a statement expression.
-rw-r--r--evaluate.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/evaluate.c b/evaluate.c
index 1fb6f4f7..18b9e0b0 100644
--- a/evaluate.c
+++ b/evaluate.c
@@ -842,11 +842,14 @@ static struct symbol *create_pointer(struct expression *expr, struct symbol *sym
/* Arrays degenerate into pointers on pointer arithmetic */
static struct symbol *degenerate(struct expression *expr)
{
- struct symbol *ctype = expr->ctype;
- struct symbol *base = ctype;
+ struct symbol *ctype, *base;
+ if (!expr)
+ return NULL;
+ ctype = expr->ctype;
if (!ctype)
return NULL;
+ base = ctype;
if (ctype->type == SYM_NODE)
base = ctype->ctype.base_type;
/*
@@ -1654,7 +1657,8 @@ struct symbol *evaluate_statement(struct statement *stmt)
return evaluate_return_expression(stmt);
case STMT_EXPRESSION:
- return evaluate_expression(stmt->expression);
+ evaluate_expression(stmt->expression);
+ return degenerate(stmt->expression);
case STMT_COMPOUND: {
struct statement *s;