The following simple C++ program dies with a 'bus error' on PA/HPUX:

struct WrongPadding {
    unsigned short one, two, three;
    /* unsigned short padding_dummy;  --> BUS ERROR w/o this padding member */
};

struct A {
public:
    void foo(int a, int b, struct WrongPadding bar) {}
};

int main(int argc, char* argv[]) {
    A obj;
    struct WrongPadding bar;
    obj.foo(0, 0, bar); // --> Bus Error when calling this member function
    return 0;
}


----

To reproduce:
-------------

$ g++ -Wall buserror.cpp -o buserror
$ ./buserror
Bus error (core dumped)

----

I suspect a problem with alignment / struct padding when calling the member
function foo. As a work-around, I added an additional 'unsigned short' member to
the struct. The 64-bit port (target hppa64-hp-hpux11.00) of gcc-3.3.3 does not
have this problem. I wasn't able to reproduce something similar with C (instead
of C++).

----

Software version information follows:
-------------------------------------

* GCC-3.3.3 was configured with:
  $ g++ -v
  Reading specs from /usr/local/lib/gcc-lib/hppa2.0w-hp-hpux11.00/3.3.3/specs
  Configured with: /extra/src/gcc-3.3.3/configure --enable-languages=c,c++
    --with-gnu-as --with-as=/usr/local/32bit/bin/as --with-ld=/usr/ccs/bin/ld
    --disable-nls
  Thread model: single
  gcc version 3.3.3

* HP Linker version: (recent linker patch applied)
  $ /usr/ccs/bin/ld -V
  92453-07 linker command s800.sgs ld PA64 B.11.41 REL 040808
  /usr/ccs/bin/ld: 92453-07 linker linker ld B.11.41 040911

* GNU assembler version: (compiled from binutils-2.14)
  $ /usr/local/32bit/bin/as -v
  GNU assembler version 2.14 (hppa2.0w-hp-hpux11.00)
  using BFD version 2.14 20030612

* binutils 2.14 was built by commercial ANSI-C compiler:
  $ what /opt/ansic/bin/cc
  /opt/ansic/bin/cc:
        $Revision: 92453-07 linker linker crt0.o B.11.16.01 030316 $
        LINT B.11.11.08 CXREF B.11.11.08
        HP92453-01 B.11.11.08 HP C Compiler
         $ PATCH/11.00:PHCO_27774  Oct  3 2002 09:45:59 $

-- 
           Summary: 'bus error' at runtime while passing a special struct to
                    a C++ member function
           Product: gcc
           Version: 3.3.3
            Status: UNCONFIRMED
          Severity: critical
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jrr at concept dot de
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: hppa2.0w-hp-hpux11.00
  GCC host triplet: hppa2.0w-hp-hpux11.00
GCC target triplet: hppa2.0w-hp-hpux11.00


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

Reply via email to