[Bug target/18956] [hppa] 'bus error' at runtime while passing a special struct to a C++ member function

danglin at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Thu Jan 20 04:25:00 GMT 2005


------- Additional Comments From danglin at gcc dot gnu dot org  2005-01-20 04:25 -------
I can reproduce this 3.3.3 and 3.4.3.  However, 4.0.0 doesn't have the
problem.  While this problem may be target specific (ie., a big endian
target with downward padding for structures), I don't believe this is
actually a target specific problem.

The 3.4.3 code generated in main to call "foo" looks like this:

        stw %r2,-20(%r30)
        copy %r3,%r1
        copy %r30,%r3
        stwm %r1,128(%r30)
        stw %r3,-4(%r30)
        stw %r26,-36(%r3)
        stw %r25,-40(%r3)
        ldw 16(%r3),%r19
        stw %r19,-54(%r30)
        ldh 20(%r3),%r19
        sth %r19,-50(%r30)
        ldo 8(%r3),%r26
        ldi 0,%r25
        ldi 0,%r24
        .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR
        bl _ZN1A3fooEii12WrongPadding,%r2
        nop

The "stw %r19,-54(%r30)" insn is a misaligned store and causes the problem.

I also can't duplicate the problem in C.  In that case, half-word loads and
stores are used for storing the struct to the stack for the call.  Thus, I
suspect that this actually is a C++ bug.


-- 


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



More information about the Gcc-bugs mailing list