On Thu, Jul 28, 2016 at 4:24 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>
> A new testsuite failure is introduced:
>
> FAIL: text/template
>
> on both, x86_64-linux-gnu and alpha-linux-gnu.
>
> The testcase corrupts stack with a too deep recursion.
>
> There is a part in libgo/go/text/template/exec.go that should handle
> this situaiton:
>
> // maxExecDepth specifies the maximum stack depth of templates within
> // templates. This limit is only practically reached by accidentally
> // recursive template invocations. This limit allows us to return
> // an error instead of triggering a stack overflow.
> const maxExecDepth = 100000
>
> but the limit is either set too high, or the error handling code is
> inefficient on both, split-stack (x86_64) and non-split-stack (alpha)
> targets. Lowering this value to 10000 "fixes" the testcase on both
> targets.

I can not recreate this problem on x86 or x86_64.

Does this patch work around the problem on Alpha?

Ian
diff --git a/libgo/go/text/template/exec_test.go 
b/libgo/go/text/template/exec_test.go
index 3ef065e..6319706 100644
--- a/libgo/go/text/template/exec_test.go
+++ b/libgo/go/text/template/exec_test.go
@@ -11,6 +11,7 @@ import (
        "fmt"
        "io/ioutil"
        "reflect"
+       "runtime"
        "strings"
        "testing"
 )
@@ -1299,6 +1300,10 @@ func TestMissingFieldOnNil(t *testing.T) {
 }
 
 func TestMaxExecDepth(t *testing.T) {
+       // Don't try to run this test if stack space is limited.
+       if runtime.Compiler == "gccgo" && runtime.GOARCH != "amd64" && 
runtime.GOARCH != "386" {
+               t.Skipf("skipping on gccgo GOARCH %s", runtime.GOARCH)
+       }
        tmpl := Must(New("tmpl").Parse(`{{template "tmpl" .}}`))
        err := tmpl.Execute(ioutil.Discard, nil)
        got := "<nil>"

Reply via email to