From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32386 invoked by alias); 29 Dec 2010 15:54:03 -0000 Received: (qmail 32376 invoked by uid 22791); 29 Dec 2010 15:54:02 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 29 Dec 2010 15:53:58 +0000 From: "pip88nl at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/47120] New: -malign-double does not align doubles in function calls X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: pip88nl at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Wed, 29 Dec 2010 15:54:00 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-12/txt/msg02883.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47120 Summary: -malign-double does not align doubles in function calls Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned@gcc.gnu.org ReportedBy: pip88nl@gmail.com According to the gcc manual, -malign-double creates object code with an ABI that is incompatible to code that was not compiled with that switch. With this switch, structs containing doubles are aligned correctly (according to double's alignment requirements) but doubles passed to functions are not. E.g.: void foo (int i, double d); int main () { foo (1, 2); return 0; } On x86, this will emit code storing the double value of 2.0 to a word-aligned stack location, not a double-word aligned location, as the manual implies. I suppose the reason for not aligning doubles on a two word boundary in this instance is that it would, in addition to the struct ABI, break the x86 calling convention. However, not aligning the double correctly will make code fail that requires aligned access.