mirror of
				https://github.com/golang/go.git
				synced 2025-11-01 01:00:56 +00:00 
			
		
		
		
	cmd/compile/internal/types2: avoid "declared but not used" errors for invalid code
Agressively mark all LHS variables in assignments as used if there is any error in the (entire) assignment. This reduces the number of spurious "declared but not used" errors in programs that are invalid in the first place. This behavior is closer to the behavior of the compiler's original type checker (types1) and lets us remove lines of the form "_ = variable" just to satisfy test cases. It also makes more important errors visible by not crowding them out. Remove the Checker.useLHS function and use Checker.use instead: useLHS didn't evaluate top-level variables, but we actually want them to be evaluated in an error scenario so that they are getting used (and thus we don't get the "declared but not used" error). Fixes #42937. Change-Id: Idda460f6b81c66735bf9fd597c54188949bf12b8 Reviewed-on: https://go-review.googlesource.com/c/go/+/351730 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
		
							parent
							
								
									c0766d2cd0
								
							
						
					
					
						commit
						ddb5a42b25
					
				
					 9 changed files with 57 additions and 71 deletions
				
			
		|  | @ -24,7 +24,6 @@ type Start struct { | |||
| 
 | ||||
| func (start *Start) Next() *Inst { return nil } | ||||
| 
 | ||||
| 
 | ||||
| func AddInst(Inst) *Inst { | ||||
| 	print("ok in addinst\n") | ||||
| 	return nil | ||||
|  | @ -33,8 +32,6 @@ func AddInst(Inst) *Inst { | |||
| func main() { | ||||
| 	print("call addinst\n") | ||||
| 	var x Inst = AddInst(new(Start)) // ERROR "pointer to interface|incompatible type" | ||||
| 	_ = x | ||||
| 	print("return from  addinst\n") | ||||
| 	var y *Inst = new(Start)  // ERROR "pointer to interface|incompatible type" | ||||
| 	_ = y | ||||
| 	var y *Inst = new(Start) // ERROR "pointer to interface|incompatible type" | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Robert Griesemer
						Robert Griesemer