When passing three uint64_t arguments to a function, AVR-GCC generates completely wrong code.
The first two uint64_t arguments are passed in registers, and thus not affected. The caller then allocates 8 bytes on the stack for the fourth argument, but writes to 8 bytes beyond the allocated area (destroying the current function's stack). The callee tries to fetch the values from the locations on the stack where they ought to be (but actually aren't). This bug appears in all tested versions of GCC (3.4.6, 4.1.0, SVN trunk). -- Summary: AVR: wrong code generated when passing three uint64_t arguments to function Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: critical Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: j at uriah dot heep dot sax dot de GCC build triplet: *-*-* GCC host triplet: *-*-* GCC target triplet: avr-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27386