From: Clifford Wolf Date: Fri, 18 Sep 2015 07:50:53 +0000 (+0200) Subject: Added AST_INITIAL checks for $finish and $display X-Git-Tag: yosys-0.6~163^2 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9db05d17feddf7615bb8944390fa7b535cd48b12;p=yosys.git Added AST_INITIAL checks for $finish and $display --- diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 144fd41d0..dd4f0797e 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -187,10 +187,13 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage, // but should be good enough for most uses if ((type == AST_TCALL) && ((str == "$display") || (str == "$write"))) { + if (!current_always || current_always->type != AST_INITIAL) + log_error("System task `$display' outside initial block is unsupported at %s:%d.\n", filename.c_str(), linenum); + size_t nargs = GetSize(children); if(nargs < 1) { - log_error("System task ``$display\" got %d arguments, expected >= 1 at %s:%d.\n", + log_error("System task `$display' got %d arguments, expected >= 1 at %s:%d.\n", int(children.size()), filename.c_str(), linenum); } @@ -1652,11 +1655,15 @@ skip_dynamic_range_lvalue_expansion:; if (current_scope.count(str) == 0 || current_scope[str]->type != AST_FUNCTION) log_error("Can't resolve function name `%s' at %s:%d.\n", str.c_str(), filename.c_str(), linenum); } + if (type == AST_TCALL) { if (str == "$finish") { - log_error("System task `$finish() executed in `%s' at %s:%d.\n", str.c_str(), filename.c_str(), linenum); + if (!current_always || current_always->type != AST_INITIAL) + log_error("System task `$finish' outside initial block is unsupported at %s:%d.\n", filename.c_str(), linenum); + + log_error("System task `$finish' executed at %s:%d.\n", filename.c_str(), linenum); } if (str == "\\$readmemh" || str == "\\$readmemb")