FAQ
Reviewers: iant, rsc,

Message:
Hello iant, rsc (cc: golang-dev@googlegroups.com),

I'd like you to review this change to
https://code.google.com/p/go


Description:
[release-branch.go1.1] cmd/gc: compute initialization order for
top-level blank vars too.

««« CL 8601044 / 3a74e15c5d56
cmd/gc: compute initialization order for top-level blank vars too.

Fixes issue 5244.

R=golang-dev, rsc, iant, r, daniel.morsing
CC=golang-dev
https://codereview.appspot.com/8601044
»»»


Please review this at https://codereview.appspot.com/10250043/

Affected files:
    M src/cmd/gc/sinit.c
    A test/fixedbugs/issue5244.go


Index: src/cmd/gc/sinit.c
===================================================================
--- a/src/cmd/gc/sinit.c
+++ b/src/cmd/gc/sinit.c
@@ -53,9 +53,7 @@
     if(isblank(n) && n->curfn == N && n->defn != N && n->defn->initorder ==
InitNotStarted) {
      // blank names initialization is part of init() but not
      // when they are inside a function.
- n->defn->initorder = InitDone;
- if(debug['%']) dump("nonstatic", n->defn);
- *out = list(*out, n->defn);
+ break;
     }
     return;
    }
@@ -130,7 +128,7 @@
       init2(n->defn->right, out);
       if(debug['j'])
        print("%S\n", n->sym);
- if(!staticinit(n, out)) {
+ if(isblank(n) || !staticinit(n, out)) {
        if(debug['%']) dump("nonstatic", n->defn);
        *out = list(*out, n->defn);
       }
Index: test/fixedbugs/issue5244.go
===================================================================
new file mode 100644
--- /dev/null
+++ b/test/fixedbugs/issue5244.go
@@ -0,0 +1,18 @@
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5244: the init order computation uses the wrong
+// order for top-level blank identifier assignments.
+// The example used to panic because it tries calling a
+// nil function instead of assigning to f before.
+
+package main
+
+var f = func() int { return 1 }
+var _ = f() + g()
+var g = func() int { return 2 }
+
+func main() {}


--

---
You received this message because you are subscribed to the Google Groups "golang-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Search Discussions

  • Iant at Jun 13, 2013 at 12:27 am
    LGTM

    https://codereview.appspot.com/10250043/

    --

    ---
    You received this message because you are subscribed to the Google Groups "golang-dev" group.
    To unsubscribe from this group and stop receiving emails from it, send an email to golang-dev+unsubscribe@googlegroups.com.
    For more options, visit https://groups.google.com/groups/opt_out.
  • Adg at Jun 13, 2013 at 12:30 am
    *** Submitted as
    https://code.google.com/p/go/source/detail?r=10ace6ccf503 ***

    [release-branch.go1.1] cmd/gc: compute initialization order for
    top-level blank vars too.

    ««« CL 8601044 / 3a74e15c5d56
    cmd/gc: compute initialization order for top-level blank vars too.

    Fixes issue 5244.

    R=golang-dev, rsc, iant, r, daniel.morsing
    CC=golang-dev
    https://codereview.appspot.com/8601044
    »»»

    R=iant, rsc
    CC=golang-dev
    https://codereview.appspot.com/10250043


    https://codereview.appspot.com/10250043/

    --

    ---
    You received this message because you are subscribed to the Google Groups "golang-dev" group.
    To unsubscribe from this group and stop receiving emails from it, send an email to golang-dev+unsubscribe@googlegroups.com.
    For more options, visit https://groups.google.com/groups/opt_out.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupgolang-dev @
categoriesgo
postedJun 13, '13 at 12:05a
activeJun 13, '13 at 12:30a
posts3
users2
websitegolang.org

2 users in discussion

Adg: 2 posts Iant: 1 post

People

Translate

site design / logo © 2022 Grokbase