mirror of
https://github.com/golang/go
synced 2024-11-25 19:17:57 -07:00
cmd/gc: don't dereference a nil Type pointer in widstruct
The nil dereference in the next few lines doesn't seem to cause a segmentation fault on Unix, but does seem to halt the Go compiler. The following is a test case: >>> package main func mine(int b) int { return b + 2 } func main() { mine() c = mine() } <<< Without this change only the following is caught: typecheck.go:3: undefined: b typecheck.go:4: undefined: b with it, we catch all the errors: typecheck.go:3: undefined: b typecheck.go:4: undefined: b typecheck.go:10: undefined: c typecheck.go:10: cannot assign to c . R=rsc, minux.ma CC=golang-dev https://golang.org/cl/6542060
This commit is contained in:
parent
a45777fe99
commit
51e8fe5b1b
@ -54,6 +54,8 @@ widstruct(Type *errtype, Type *t, vlong o, int flag)
|
|||||||
for(f=t->type; f!=T; f=f->down) {
|
for(f=t->type; f!=T; f=f->down) {
|
||||||
if(f->etype != TFIELD)
|
if(f->etype != TFIELD)
|
||||||
fatal("widstruct: not TFIELD: %lT", f);
|
fatal("widstruct: not TFIELD: %lT", f);
|
||||||
|
if(f->type == T)
|
||||||
|
break;
|
||||||
dowidth(f->type);
|
dowidth(f->type);
|
||||||
if(f->type->align > maxalign)
|
if(f->type->align > maxalign)
|
||||||
maxalign = f->type->align;
|
maxalign = f->type->align;
|
||||||
|
18
test/typecheck.go
Normal file
18
test/typecheck.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// errorcheck
|
||||||
|
|
||||||
|
// Verify that the Go compiler will not
|
||||||
|
// die after running into an undefined
|
||||||
|
// type in the argument list for a
|
||||||
|
// function.
|
||||||
|
// Does not compile.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
func mine(int b) int { // ERROR "undefined.*b"
|
||||||
|
return b + 2 // ERROR "undefined.*b"
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
mine()
|
||||||
|
c = mine() // ERROR "undefined.*c" "cannot assign to c"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user