New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmd/compile: -G=3 mode correctly reports all "declared but not used" errors, but old compiler does not #46004
Comments
See also: #8560 (comment) |
This test is clearly working now, since we have enabled -G=3 by default. I don't see any code in TestOutput() that disables the test. On the other hand, there is still the difference in behavior between -G=3 and -G=0 mode for the program described above. Haven't tried to narrow this down further as to when/how this was fixed. |
Summary: package main
func main() {
p := true
func() {
p = true
}()
} The old compiler (-G=0) does not report an error. Since @rsc any thoughts? |
FYI, @mdempsky has a CL to make old typechecker also reports the error: https://go-review.googlesource.com/c/go/+/238317 |
Filed proposal #49214 to decide whether we can make this change. |
Per #49214 we will accept the correct behavior and document it in the release notes. If this ends up breaking a lot of code, we can re-open. |
For current master, if you enable -G=3 in the compiler by adding 'Flag.G = 3' at the end of ParseFlags in cmd/compile/internal/base/flag.go, then this command fails
This is one of the commands that is run under the "##### Testing race detector" section of the all.bash tests.
The reason is that types2 reports an error "main.go:4:2: x declared but not used" (which does seem most correct) for:
whereas the current compiler/typechecker (-G=0) does not report any error. (Note that 'go vet' does return the error "vet: ./test.go:4:2: x declared but not used".)
So, we have to decide if we can make this change in the behavior in the typechecker or not. If not, then we need to "fix" types2 to not report this error.
If it's OK to have this change in behavior, then we can make the test work for both by changing the test program (occurs several times in runtime/race/output_test.go) to end with:
The text was updated successfully, but these errors were encountered: