<p dir="auto">The linux/arm64 port has been broken since March 20. Now that I have access to hardware, here is a minimal reproduction:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="package main

func main() {    
        text := &quot;abc&quot;
        s := &amp;s{text}
        println(text[2] == s.text[2])
}

type s struct {
        text string
}"><pre class="notranslate"><code class="notranslate">package main

func main() {    
        text := "abc"
        s := &amp;s{text}
        println(text[2] == s.text[2])
}

type s struct {
        text string
}
</code></pre></div>
<p dir="auto">On linux/arm64 (tip <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/golang/go/commit/f8fd5502ecdba0f40d794d22f7eb14c9b471a773/hovercard" href="https://github.com/golang/go/commit/f8fd5502ecdba0f40d794d22f7eb14c9b471a773"><tt>f8fd550</tt></a>), bootstrapped with <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/golang/go/commit/11dba2ec2d8fcedc1da0103925c254586ef51120/hovercard" href="https://github.com/golang/go/commit/11dba2ec2d8fcedc1da0103925c254586ef51120"><tt>11dba2e</tt></a>, this prints false.</p>
<p dir="auto">/cc <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davecheney/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davecheney">@davecheney</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/4ad/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/4ad">@4ad</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rsc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rsc">@rsc</a></p>
<p dir="auto">Distilled from one of the failures in go test strings, a small-ish test case looks like this:</p>
<div class="highlight highlight-text-shell-session notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="mwhudson@am2:~/go/src$ cat s5.go
package main

import &quot;fmt&quot;

type stringFinder struct {
    pattern        string
}

var f = &amp;stringFinder{pattern: &quot;He&quot;}

func next() int {
    i := 1
    for i &lt; 6 {
        // Compare backwards from the end until the first unmatching character.
        j := 1
        for j &gt;= 0 &amp;&amp; &quot;xHello&quot;[i] == f.pattern[j] {
            i--
            j--
        }
        if j &lt; 0 {
            return i + 1 // match
        }
        i += 1
    }
    return -1
}

func main() {
    fmt.Println(next())
}
mwhudson@am2:~/go/src$ ~/go/bin/go run s5.go
-1
mwhudson@am2:~/go/src$ ~/go1.4/bin/go run s5.go
1"><pre class="notranslate"><span class="pl-e">mwhudson@am2:~/go/src</span>$ <span class="pl-s1">cat s5.go</span>
<span class="pl-c1">package main</span>

<span class="pl-c1">import "fmt"</span>

<span class="pl-c1">type stringFinder struct {</span>
<span class="pl-c1">    pattern        string</span>
<span class="pl-c1">}</span>

<span class="pl-c1">var f = &amp;stringFinder{pattern: "He"}</span>

<span class="pl-c1">func next() int {</span>
<span class="pl-c1">    i := 1</span>
<span class="pl-c1">    for i &lt; 6 {</span>
<span class="pl-c1">        // Compare backwards from the end until the first unmatching character.</span>
<span class="pl-c1">        j := 1</span>
<span class="pl-c1">        for j &gt;= 0 &amp;&amp; "xHello"[i] == f.pattern[j] {</span>
<span class="pl-c1">            i--</span>
<span class="pl-c1">            j--</span>
<span class="pl-c1">        }</span>
<span class="pl-c1">        if j &lt; 0 {</span>
<span class="pl-c1">            return i + 1 // match</span>
<span class="pl-c1">        }</span>
<span class="pl-c1">        i += 1</span>
<span class="pl-c1">    }</span>
<span class="pl-c1">    return -1</span>
<span class="pl-c1">}</span>

<span class="pl-c1">func main() {</span>
<span class="pl-c1">    fmt.Println(next())</span>
<span class="pl-c1">}</span>
<span class="pl-e">mwhudson@am2:~/go/src</span>$ <span class="pl-s1"><span class="pl-k">~</span>/go/bin/go run s5.go</span>
<span class="pl-c1">-1</span>
<span class="pl-e">mwhudson@am2:~/go/src</span>$ <span class="pl-s1"><span class="pl-k">~</span>/go1.4/bin/go run s5.go</span>
<span class="pl-c1">1</span></pre></div>
<p dir="auto">This assembles to <a href="https://gist.github.com/mwhudson/41bbb7f10f6eda55ad86">https://gist.github.com/mwhudson/41bbb7f10f6eda55ad86</a>, which is as hard to read as any page of assembly, but single stepping through in gdb shows the problem: line 25 loads "xHellox"[i] into w0 and line 32 stomps on it, before line 39 does the comparison.</p>