http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60134

            Bug ID: 60134
           Summary: runtime_unmarkspan panics with "unaligned pointer"
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: go
          Assignee: ian at airs dot com
          Reporter: vogt at linux dot vnet.ibm.com

(using git commit id e63988cca99cbbf6e5c459379309fe3359fe7c09)

The test case convert.go fails with a panic in a panic on System/z:

-- snip --
fatal error: markspan: unaligned pointer

goroutine 1 [running]:
runtime_dopanic
    ../../../libgo/runtime/panic.c:77
runtime_throw
    ../../../libgo/runtime/panic.c:115
runtime_unmarkspan
    ../../../libgo/runtime/mgc0.c:2452
__go_free
    ../../../libgo/runtime/malloc.goc:240
__go_panic
    ../../../libgo/runtime/go-panic.c:106
runtime_panicstring
    ../../../libgo/runtime/panic.c:134
__go_map_index
    ../../../libgo/runtime/go-map-index.c:92
reflect.canonicalize
    ../../../libgo/go/reflect/type.go:1782
reflect.toType
    ../../../libgo/go/reflect/type.go:1791
reflect.TypeOf
    ../../../libgo/go/reflect/type.go:1026
fmt..import
    ../../../libgo/go/fmt/print.go:643
__go_init_main
    /home/vogt/src/git/gcc/gcc/testsuite/go.test/test/convert.go:9
runtime_main
    ../../../libgo/runtime/proc.c:555
kickoff
    ../../../libgo/runtime/proc.c:232
-- snip --

It turns out that mgc0.c:runtime_unmarkspan() is called with a pointer that
should be 16 byte aligned (wordsPerBitmapWord) but is actually only 8 byte
aligned.  The original pointer points to the stack variable "Defer d" in
proc.c:runtime_main().  I guess the code should somehow enforce that "Defer d"
is aligned to mgc0.c:wordsPerBitmapWord bytes, although I'm not sure about the
right way to fix this.

Note: Even though adding "__attribute__ ((align(16)))" for d fixes the problem
for me, the test case still fails, but that is another issue that may or may
not be platform specific.  In any case I'll look into that and open another bug
report if necessary.

Reply via email to