https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90482
Bug ID: 90482 Summary: [10 regression] Many 32-bit Solaris/SPARC tests FAIL with SIGBUS Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: go Assignee: ian at airs dot com Reporter: ro at gcc dot gnu.org CC: cmang at google dot com Target Milestone: --- Target: sparc*-sun-solaris2.11 Between 20190426 (r270592) and 20190502 (r270801), quite a number of 32-bit libgo tests started to FAIL on Solaris 11/SPARC: +FAIL: archive/tar +FAIL: archive/zip +FAIL: cmd/go/internal/cache +FAIL: cmd/go/internal/generate +FAIL: cmd/go/internal/get +FAIL: cmd/go/internal/imports +FAIL: cmd/go/internal/load +FAIL: cmd/go/internal/modconv +FAIL: cmd/go/internal/modfetch +FAIL: cmd/go/internal/modfetch/codehost +FAIL: cmd/go/internal/modfile +FAIL: cmd/go/internal/modload +FAIL: cmd/go/internal/mvs +FAIL: cmd/go/internal/search +FAIL: cmd/go/internal/web2 +FAIL: cmd/go/internal/work +FAIL: crypto/ecdsa +FAIL: crypto/elliptic +FAIL: crypto/tls +FAIL: crypto/x509 +FAIL: encoding/json +FAIL: go/constant +FAIL: go/doc +FAIL: go/importer +FAIL: go/internal/gccgoimporter +FAIL: go/internal/gcimporter +FAIL: go/internal/srcimporter +FAIL: go/parser +FAIL: go/types +FAIL: image/draw +FAIL: index/suffixarray +FAIL: internal/x/net/http/httpproxy +FAIL: io/ioutil +FAIL: log +FAIL: mime/multipart +FAIL: mime/quotedprintable +FAIL: net/http/fcgi +FAIL: net/http/httptest +FAIL: net/http/httputil +FAIL: reflect +FAIL: regexp +FAIL: regexp/syntax +FAIL: runtime/pprof/internal/profile A reghunt revealed that this was caused by The first bad revision is: changeset: 52654:1c7bcc41ff5f user: ian@138bc75d-0d04-0410-961f-82ee72b054a4 date: Wed May 01 21:34:16 2019 +0000 summary: compiler,runtime: do more direct interfaces unexpected fault address 49 fatal error: fault [signal SIGBUS: bus error code=1 addr=49 pc=4272022460] goroutine 1 [running, locked to thread]: runtime.dopanic_m /var/gcc/reghunt/trunk/libgo/go/runtime/panic.go:1037 runtime.fatalthrow /var/gcc/reghunt/trunk/libgo/go/runtime/panic.go:906 runtime.throw /var/gcc/reghunt/trunk/libgo/go/runtime/panic.go:877 runtime.sigpanic /var/gcc/reghunt/trunk/libgo/go/runtime/signal_unix.go:347 runtime.sighandler /var/gcc/reghunt/trunk/libgo/go/runtime/signal_sighandler.go:100 runtime.sigtrampgo /var/gcc/reghunt/trunk/libgo/go/runtime/signal_unix.go:314 __sighndlr :0 regexp..z2fsyntax.ranges.Less /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868 sort.medianOfThree /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:76 sort.doPivot /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:105 sort.quickSort /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:190 sort.Sort /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:218 syntax.cleanClass /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1631 regexp..z2fsyntax.parser.parseClass /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1617 regexp..z2fsyntax.Parse /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:774 regexp.compile /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:168 regexp.Compile /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:131 regexp.MustCompile /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:270 cmd..z2fgo..z2finternal..z2fmodfile..import /var/gcc/reghunt/trunk/libgo/go/cmd/go/internal/modfile/rule.go:157 __go_init_main /var/gcc/reghunt/libgo32/52654/sparc-sun-solaris2.11/libgo/gotest8213/test/_testmain.go:1 runtime.main /var/gcc/reghunt/trunk/libgo/go/runtime/proc.go:209 goroutine 4 [syscall]: goroutine in C code; stack unavailable created by os..z2fsignal.os..z2fsignal..init0 /var/gcc/reghunt/trunk/libgo/go/os/signal/signal_unix.go:29 +36 /var/gcc/reghunt/trunk/libgo/testsuite/gotest[689]: wait: 8385: Terminated Keeping gotest8213 FAIL: cmd/go/internal/modload gdb shows Thread 2 received signal SIGSEGV, Segmentation fault. [Switching to Thread 1 (LWP 1)] 0xfe97d644 in regexp..z2fsyntax.ranges.Less (ra=..., i=0, j=28) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868 1868 return p[i] < p[j] || p[i] == p[j] && p[i+1] > p[j+1] (gdb) where #0 0xfe97d644 in regexp..z2fsyntax.ranges.Less (ra=..., i=0, j=28) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868 #1 0xfea1e3bc in sort.medianOfThree (data=..., m1=0, m0=14, m2=27) at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:76 #2 0xfea1e4a8 in sort.doPivot (hi=<optimized out>, lo=0, data=...) at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:105 #3 sort.quickSort (data=..., a=0, b=<optimized out>, maxDepth=9) at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:190 #4 0xfea1e9c8 in sort.Sort (data=...) at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:218 #5 0xfe980408 in syntax.cleanClass (rp=rp@entry=0x710114) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1631 #6 0xfe987828 in regexp..z2fsyntax.parser.parseClass (p=p@entry=0x7180c0, s=...) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1617 #7 0xfe98a9a4 in regexp..z2fsyntax.Parse (s=..., flags=flags@entry=212) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:774 #8 0xfe974140 in regexp.compile (expr=..., mode=mode@entry=212, longest=longest@entry=false) at /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:168 #9 0xfe975184 in regexp.Compile (expr=...) at /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:131 #10 0xfe975318 in regexp.MustCompile (str=...) at /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:270 #11 0x00154828 in cmd..z2fgo..z2finternal..z2fmodfile..import () at /var/gcc/reghunt/trunk/libgo/go/cmd/go/internal/modfile/rule.go:157 #12 0x000ef9e8 in main.init () at _testmain.go:1 #13 0xfe9e366c in runtime.main (p.0=0x0) at /var/gcc/reghunt/trunk/libgo/go/runtime/proc.go:209 #14 0xfe9dfe50 in runtime.kickoff () at /var/gcc/reghunt/trunk/libgo/go/runtime/proc.go:1205 #15 0xfda8b32c in __makecontext_v2 () from /lib/libc.so.1 However, the signal is wrong due to a gdb bug. truss shows it's a SIGBUS instead: /1: Incurred fault #5, FLTACCESS %pc = 0xFE97D644 /1: siginfo: SIGBUS BUS_ADRALN addr=0x00000031 /1: Received signal #10, SIGBUS [caught] /1: siginfo: SIGBUS BUS_ADRALN addr=0x00000031 #0 0xfe97d644 in regexp..z2fsyntax.ranges.Less (ra=..., i=0, j=28) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868 1868 return p[i] < p[j] || p[i] == p[j] && p[i+1] > p[j+1] (gdb) p p $5 = {__values = 0x31, __count = 57, __capacity = <optimized out>}