diff --git a/parse.y b/parse.y index 27c8d7e5a..0a0a1b744 100644 --- a/parse.y +++ b/parse.y @@ -249,9 +249,12 @@ static void current_task_set_statement(const YYLTYPE&loc, vector*s) current_task->set_statement(tmp); return; } + assert(s); - /* The parser assures that there is a non-empty vector. */ - assert(s && !s->empty()); + /* An empty vector represents one or more null statements. Handle + this as a simple null statement. */ + if (s->empty()) + return; /* A vector of 1 is handled as a simple statement. */ if (s->size() == 1) { @@ -284,9 +287,12 @@ static void current_function_set_statement(const YYLTYPE&loc, vector current_function->set_statement(tmp); return; } + assert(s); - /* The parser assures that there is a non-empty vector. */ - assert(s && !s->empty()); + /* An empty vector represents one or more null statements. Handle + this as a simple null statement. */ + if (s->empty()) + return; /* A vector of 1 is handled as a simple statement. */ if (s->size() == 1) { @@ -5699,12 +5705,12 @@ statement_or_null_list_opt statement_or_null_list : statement_or_null_list statement_or_null { vector*tmp = $1; - tmp->push_back($2); + if ($2) tmp->push_back($2); $$ = tmp; } | statement_or_null - { vector*tmp = new vector(1); - tmp->at(0) = $1; + { vector*tmp = new vector(0); + if ($1) tmp->push_back($1); $$ = tmp; } ;