This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

optimization/7591: function-related struct copy bug


>Number:         7591
>Category:       optimization
>Synopsis:       function-related struct copy bug
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Aug 13 15:56:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     http://www.linuxfromscratch.org/ development team
>Release:        unknown-1.0
>Organization:
>Environment:
System: Linux valhalla 2.4.18-1 #4 Mon Jun 10 22:08:58 CDT 2002 i686 AuthenticAMD
Architecture: i686

        <machine, os, target, libraries (multiple lines)>
host: i386-incept-linux-gnu
build: i386-incept-linux-gnu
target: i386-incept-linux-gnu
configured with: ../gcc-3.1.1/configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-version-specific-runtime-libs --enable-threads=posix --enable-languages=c,c++ --enable-shared --with-system-zlib --with-__cxa_atexit --host=i386-incept-linux-gnu --target=i386-incept-linux-gnu --build=i386-incept-linux-gnu
>Description:
Ok, I'm now posting this as an official bug.

gcc 3.1 and higher (including current CVS HEAD aka gcc-3.3) have a problem passing structs (not struct pointers) to functions when those structs contain static char arrays, and -march=i686 or higher is used (-march=athlon-{xp,mp} seems to be exempt for some reason, though -march=athlon is affected).  Basically, the struct that the function receives has garbage contents.

Structs with static arrays of other types (such as int or float) do not seem to trigger this bug.
>How-To-Repeat:
Below is a small testcase (same .c file that was used to generate the attached .i file).

--Begin testcase.c--
#include <stdio.h>

struct abba {
    char str[128];
};

void test(struct abba ke)
{
    printf("%s\n", ke.str);
}

int main()
{
    struct abba ke;

    strcpy(ke.str, "DOH");
    test(ke);
}
--End testcase.c--

[ root@valhalla /usr/src ] # gcc -O2 -march=i686 \
testcase.c -o testcase
[ root@valhalla /usr/src ] # ./testcase
ج@`ûÿ¿¨G@`a    @ÈØ@8K@7û@Xýÿ¿/
[ root@valhalla /usr/src ] # gcc -O2 -march=i486 \
testcase.c -o testcase
[ root@valhalla /usr/src ] # ./testcase
DOH
[ root@valhalla /usr/src ] # gcc -march=i686 testcase.c \
-o testcase
[ root@valhalla /usr/src ] # ./testcase
ûÿ¿¨G@`a        @ÈØ@8K@7û@Xýÿ¿/
>Fix:
I know of no real fix for this problem.  It has been suggested that -maccumulate-outgoing-args triggers the problem.  Code which wishes to step around the bug should not pass structs in function headers anyways, but rather use const struct pointers, and make a copy of the struct inside the function if modifications are necessary.  Most code does this already as a practice of good coding style, but there are some notable exceptions (primarily loadkeys in kbd-1.06).
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-gzip; name="testcase.i.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="testcase.i.gz"

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]