cgen: fix bug with duplicate defer generation (#8503)
							parent
							
								
									b40252bd97
								
							
						
					
					
						commit
						4b99d6af95
					
				| 
						 | 
				
			
			@ -332,6 +332,7 @@ pub:
 | 
			
		|||
pub mut:
 | 
			
		||||
	stmts         []Stmt
 | 
			
		||||
	return_type   table.Type
 | 
			
		||||
	has_return    bool
 | 
			
		||||
	comments      []Comment // comments *after* the header, but *before* `{`; used for InterfaceDecl
 | 
			
		||||
	next_comments []Comment // coments that are one line after the decl; used for InterfaceDecl
 | 
			
		||||
	source_file   &File = 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5676,9 +5676,9 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
 | 
			
		|||
	if c.fn_mut_arg_names.len > 0 {
 | 
			
		||||
		c.fn_mut_arg_names.clear()
 | 
			
		||||
	}
 | 
			
		||||
	returns := c.returns || has_top_return(node.stmts)
 | 
			
		||||
	if node.language == .v && !node.no_body && node.return_type != table.void_type && !returns
 | 
			
		||||
		&& node.name !in ['panic', 'exit'] {
 | 
			
		||||
	node.has_return = c.returns || has_top_return(node.stmts)
 | 
			
		||||
	if node.language == .v && !node.no_body && node.return_type != table.void_type
 | 
			
		||||
		&& !node.has_return&& node.name !in ['panic', 'exit'] {
 | 
			
		||||
		if c.inside_anon_fn {
 | 
			
		||||
			c.error('missing return at the end of an anonymous function', node.pos)
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -192,7 +192,7 @@ fn (mut g Gen) gen_fn_decl(node ast.FnDecl, skip bool) {
 | 
			
		|||
		g.fn_mut_arg_names.clear()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if node.return_type == table.void_type {
 | 
			
		||||
	if !node.has_return {
 | 
			
		||||
		g.write_defer_stmts_when_needed()
 | 
			
		||||
	}
 | 
			
		||||
	if node.is_anon {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue