mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	verilog: fix handling of nested ifdef directives
- track depth so we know whether to consider higher-level elsifs - error on unmatched endif/elsif/else
This commit is contained in:
		
							parent
							
								
									b6904a8e53
								
							
						
					
					
						commit
						1ec5994100
					
				
					 8 changed files with 197 additions and 11 deletions
				
			
		
							
								
								
									
										30
									
								
								tests/verilog/include_self.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								tests/verilog/include_self.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
`ifdef GUARD_5
 | 
			
		||||
module top;
 | 
			
		||||
	wire x;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
`elsif GUARD_4
 | 
			
		||||
`define GUARD_5
 | 
			
		||||
`include "include_self.v"
 | 
			
		||||
 | 
			
		||||
`elsif GUARD_3
 | 
			
		||||
`define GUARD_4
 | 
			
		||||
`include "include_self.v"
 | 
			
		||||
 | 
			
		||||
`elsif GUARD_2
 | 
			
		||||
`define GUARD_3
 | 
			
		||||
`include "include_self.v"
 | 
			
		||||
 | 
			
		||||
`elsif GUARD_1
 | 
			
		||||
`define GUARD_2
 | 
			
		||||
`include "include_self.v"
 | 
			
		||||
 | 
			
		||||
`elsif GUARD_0
 | 
			
		||||
`define GUARD_1
 | 
			
		||||
`include "include_self.v"
 | 
			
		||||
 | 
			
		||||
`else
 | 
			
		||||
`define GUARD_0
 | 
			
		||||
`include "include_self.v"
 | 
			
		||||
 | 
			
		||||
`endif
 | 
			
		||||
							
								
								
									
										2
									
								
								tests/verilog/include_self.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								tests/verilog/include_self.ys
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
read_verilog include_self.v
 | 
			
		||||
select -assert-count 1 top/x
 | 
			
		||||
							
								
								
									
										6
									
								
								tests/verilog/unmatched_else.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tests/verilog/unmatched_else.ys
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
logger -expect error "Found `else outside of macro conditional branch!" 1
 | 
			
		||||
read_verilog <<EOT
 | 
			
		||||
module top;
 | 
			
		||||
`else
 | 
			
		||||
endmodule
 | 
			
		||||
EOT
 | 
			
		||||
							
								
								
									
										6
									
								
								tests/verilog/unmatched_elsif.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tests/verilog/unmatched_elsif.ys
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
logger -expect error "Found `elsif outside of macro conditional branch!" 1
 | 
			
		||||
read_verilog <<EOT
 | 
			
		||||
module top;
 | 
			
		||||
`elsif
 | 
			
		||||
endmodule
 | 
			
		||||
EOT
 | 
			
		||||
							
								
								
									
										6
									
								
								tests/verilog/unmatched_endif.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tests/verilog/unmatched_endif.ys
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
logger -expect error "Found `endif outside of macro conditional branch!" 1
 | 
			
		||||
read_verilog <<EOT
 | 
			
		||||
module top;
 | 
			
		||||
`endif
 | 
			
		||||
endmodule
 | 
			
		||||
EOT
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue