diff options
Diffstat (limited to 'frontends')
| -rw-r--r-- | frontends/verilog/verilog_parser.y | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y index 678ce6c87..6c4b06d7f 100644 --- a/frontends/verilog/verilog_parser.y +++ b/frontends/verilog/verilog_parser.y @@ -884,7 +884,11 @@ task_func_args:  task_func_port:  	attr wire_type range { +		bool prev_was_input = true; +		bool prev_was_output = false;  		if (albuf) { +			prev_was_input = astbuf1->is_input; +			prev_was_output = astbuf1->is_output;  			delete astbuf1;  			if (astbuf2 != NULL)  				delete astbuf2; @@ -893,6 +897,12 @@ task_func_port:  		albuf = $1;  		astbuf1 = $2;  		astbuf2 = checkRange(astbuf1, $3); +		if (!astbuf1->is_input && !astbuf1->is_output) { +			if (!sv_mode) +				frontend_verilog_yyerror("task/function argument direction missing"); +			astbuf1->is_input = prev_was_input; +			astbuf1->is_output = prev_was_output; +		}  	} wire_name |  	{  		if (!astbuf1) {  | 
