From bc1516ce3bb78556dbfc613a7d19f7d5bbfeac6d Mon Sep 17 00:00:00 2001 From: Clemens Paumgarten <clemenspaumgarten@gmail.com> Date: Thu, 6 Jun 2019 17:27:42 +0200 Subject: [PATCH] Fix segfault on array binar op check --- src/symbol_table_parse.c | 2 +- src/symbol_table_validate.c | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/symbol_table_parse.c b/src/symbol_table_parse.c index 60b336c..8f83643 100644 --- a/src/symbol_table_parse.c +++ b/src/symbol_table_parse.c @@ -160,7 +160,7 @@ int mcc_symbol_table_parse_statement( } else { return 1; } - case MCC_AST_STATEMENT_TYPE_IF:; + case MCC_AST_STATEMENT_TYPE_IF: if(mcc_symbol_table_validate_expression( statement->if_condition, symbol_table, ec) == 0) { if (mcc_symbol_table_validate_condition_to_type_bool( diff --git a/src/symbol_table_validate.c b/src/symbol_table_validate.c index a602353..a695720 100644 --- a/src/symbol_table_validate.c +++ b/src/symbol_table_validate.c @@ -340,7 +340,7 @@ int binary_operator_contains_illegal_array( struct mcc_symbol_table *symbol_table, struct mcc_symbol_table_error_collector *ec ) { - if (expression -> identifier != NULL) { + if (expression -> type == MCC_AST_EXPRESSION_TYPE_IDENTIFIER && expression -> identifier != NULL) { struct mcc_symbol *s = mcc_symbol_table_get_symbol(symbol_table, expression->identifier->i_value); // this is a binary op with an array without index provided @@ -371,8 +371,7 @@ int mcc_symbol_table_validate_binary_operator( } int illegal_array_op_lhs = binary_operator_contains_illegal_array(expression->lhs, symbol_table, ec); - int illegal_array_op_rhs = binary_operator_contains_illegal_array(expression->lhs, symbol_table, ec); - + int illegal_array_op_rhs = binary_operator_contains_illegal_array(expression->rhs, symbol_table, ec); if(illegal_array_op_lhs || illegal_array_op_rhs) { return 1; } @@ -437,7 +436,6 @@ int mcc_symbol_table_validate_expression( assert(symbol_table); assert(ec); - switch(expression->type) { case MCC_AST_EXPRESSION_TYPE_IDENTIFIER: return mcc_symbol_table_validate_identifier(expression->identifier, symbol_table, ec); -- GitLab