diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-10-24 19:44:18 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-10-24 19:44:18 +0000 |
commit | 0eb954ba423b034b151163dc88c03466ed80ec51 (patch) | |
tree | 3a7c7b7ffcde861a01beb3e7d1625af06e68d738 | |
parent | 4ee36e812514125a0a55fde35198ef86d085c6f1 (diff) | |
download | gcc-0eb954ba423b034b151163dc88c03466ed80ec51.tar.gz |
Error if naked return when result variables are shadowed.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180401 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/go/gofrontend/parse.cc | 17 | ||||
-rw-r--r-- | libgo/go/crypto/openpgp/s2k/s2k.go | 4 | ||||
-rw-r--r-- | libgo/go/exp/gui/x11/auth.go | 12 | ||||
-rw-r--r-- | libgo/go/exp/gui/x11/conn.go | 25 |
4 files changed, 40 insertions, 18 deletions
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index 8c42fa2b24f..6f7b8f21b24 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -3839,6 +3839,23 @@ Parse::return_stat() if (this->expression_may_start_here()) vals = this->expression_list(NULL, false); this->gogo_->add_statement(Statement::make_return_statement(vals, location)); + + if (vals == NULL + && this->gogo_->current_function()->func_value()->results_are_named()) + { + Named_object* function = this->gogo_->current_function(); + Function::Results* results = function->func_value()->result_variables(); + for (Function::Results::const_iterator p = results->begin(); + p != results->end(); + ++p) + { + Named_object* no = this->gogo_->lookup((*p)->name(), NULL); + go_assert(no != NULL); + if (!no->is_result_variable()) + error_at(location, "%qs is shadowed during return", + (*p)->message_name().c_str()); + } + } } // IfStmt = "if" [ SimpleStmt ";" ] Expression Block diff --git a/libgo/go/crypto/openpgp/s2k/s2k.go b/libgo/go/crypto/openpgp/s2k/s2k.go index da926a76ed2..013b15c1497 100644 --- a/libgo/go/crypto/openpgp/s2k/s2k.go +++ b/libgo/go/crypto/openpgp/s2k/s2k.go @@ -100,7 +100,7 @@ func Parse(r io.Reader) (f func(out, in []byte), err os.Error) { } return f, nil case 2: - _, err := io.ReadFull(r, buf[:8]) + _, err = io.ReadFull(r, buf[:8]) if err != nil { return } @@ -109,7 +109,7 @@ func Parse(r io.Reader) (f func(out, in []byte), err os.Error) { } return f, nil case 3: - _, err := io.ReadFull(r, buf[:9]) + _, err = io.ReadFull(r, buf[:9]) if err != nil { return } diff --git a/libgo/go/exp/gui/x11/auth.go b/libgo/go/exp/gui/x11/auth.go index d48936ac178..732f103d669 100644 --- a/libgo/go/exp/gui/x11/auth.go +++ b/libgo/go/exp/gui/x11/auth.go @@ -65,23 +65,25 @@ func readAuth(displayStr string) (name, data string, err os.Error) { return } for { - family, err := readU16BE(br, b[0:2]) + var family uint16 + var addr, disp, name0, data0 string + family, err = readU16BE(br, b[0:2]) if err != nil { return } - addr, err := readStr(br, b[0:]) + addr, err = readStr(br, b[0:]) if err != nil { return } - disp, err := readStr(br, b[0:]) + disp, err = readStr(br, b[0:]) if err != nil { return } - name0, err := readStr(br, b[0:]) + name0, err = readStr(br, b[0:]) if err != nil { return } - data0, err := readStr(br, b[0:]) + data0, err = readStr(br, b[0:]) if err != nil { return } diff --git a/libgo/go/exp/gui/x11/conn.go b/libgo/go/exp/gui/x11/conn.go index 1d237816abf..98c65b95fae 100644 --- a/libgo/go/exp/gui/x11/conn.go +++ b/libgo/go/exp/gui/x11/conn.go @@ -391,12 +391,13 @@ func checkPixmapFormats(r io.Reader, b []byte, n int) (agree bool, err os.Error) // checkDepths checks that we have an agreeable X Depth (i.e. one that has an agreeable X VisualType). func checkDepths(r io.Reader, b []byte, n int, visual uint32) (agree bool, err os.Error) { for i := 0; i < n; i++ { - depth, err := readU16LE(r, b) + var depth, visualsLen uint16 + depth, err = readU16LE(r, b) if err != nil { return } depth &= 0xff - visualsLen, err := readU16LE(r, b) + visualsLen, err = readU16LE(r, b) if err != nil { return } @@ -408,11 +409,11 @@ func checkDepths(r io.Reader, b []byte, n int, visual uint32) (agree bool, err o for j := 0; j < int(visualsLen); j++ { // Read 24 bytes: visual(4), class(1), bits per rgb value(1), colormap entries(2), // red mask(4), green mask(4), blue mask(4), padding(4). - v, err := readU32LE(r, b) - _, err = readU32LE(r, b) - rm, err := readU32LE(r, b) - gm, err := readU32LE(r, b) - bm, err := readU32LE(r, b) + v, _ := readU32LE(r, b) + _, _ = readU32LE(r, b) + rm, _ := readU32LE(r, b) + gm, _ := readU32LE(r, b) + bm, _ := readU32LE(r, b) _, err = readU32LE(r, b) if err != nil { return @@ -428,7 +429,8 @@ func checkDepths(r io.Reader, b []byte, n int, visual uint32) (agree bool, err o // checkScreens checks that we have an agreeable X Screen. func checkScreens(r io.Reader, b []byte, n int) (root, visual uint32, err os.Error) { for i := 0; i < n; i++ { - root0, err := readU32LE(r, b) + var root0, visual0, x uint32 + root0, err = readU32LE(r, b) if err != nil { return } @@ -438,17 +440,18 @@ func checkScreens(r io.Reader, b []byte, n int) (root, visual uint32, err os.Err if err != nil { return } - visual0, err := readU32LE(r, b) + visual0, err = readU32LE(r, b) if err != nil { return } // Next 4 bytes: backing stores, save unders, root depth, allowed depths length. - x, err := readU32LE(r, b) + x, err = readU32LE(r, b) if err != nil { return } nDepths := int(x >> 24) - agree, err := checkDepths(r, b, nDepths, visual0) + var agree bool + agree, err = checkDepths(r, b, nDepths, visual0) if err != nil { return } |