This is the mail archive of the gcc-bugs@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]

[Bug c/58941] New: MIPS: value modification on zero-length array optimized away


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

            Bug ID: 58941
           Summary: MIPS: value modification on zero-length array
                    optimized away
           Product: gcc
           Version: 4.6.3
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: thomas.moschcau at web dot de

Created attachment 31122
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31122&action=edit
preprocessed example source file

Hello,
on mips32 with gcc4.6.3, I get unexpected results when writing to a buffer via
a pointer to a zero-sized array. 
Below is an example to produce the error.
Find additional info from gcc further below.
Thanks, Thomas

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int msgLength;
    unsigned char data[1000];
} SMsg;

typedef struct {
    int dummy;
    int d[0];  // using d[] would fix it
} SData;

int condition = 3;

void checkData( SMsg* pMsg );

void runBug( void )
{
    SMsg msg; // generic message

    SData *pData = (SData*)(msg.data); // pointer to specific payload
    unsigned int i = 0; // no bug with signed int
    for ( i = 0; i < 1; i++ ) // bug does not appear without this loop
    {
        pData->d[i] = 0;
        if(condition & 1)
        {    
            pData->d[i] |= 0x55;
            // d[0] is now 0x55
        }
        if(condition & 2)
        {    
            pData->d[i] |= 0xaa;
            // d[0] should now be 0xff but is 0xaa
        }
    }
    checkData( &msg );
}

void checkData( SMsg* pMsg )
{
    SData *pData = (SData*)(pMsg->data);
    if (pData->d[0] != 0xff)
    {
        printf("ERROR d[0]=0x%x, but should be 0x%x|0x%x\n", 
                (unsigned int)pData->d[0], 0x55, 0xaa );
        exit(255);
    }
}

int main( void )
{
    runBug();
    return 0;
}

--------------------------------------------------------------
/tmp/tlc/usr/bin/mips-linux-gcc -v -fno-strict-aliasing -O2 -Wall -Wextra -g
-fwrapv -save-temps  -o test_gccbug test.c
Using built-in specs.
COLLECT_GCC=/tmp/tlc/usr/bin/mips-linux-gcc
COLLECT_LTO_WRAPPER=/tmp/tlc/usr/bin/../libexec/gcc/mips-buildroot-linux-uclibc/4.6.3/lto-wrapper
Target: mips-buildroot-linux-uclibc
Configured with:
/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/toolchain/gcc-4.6.3/configure
--prefix=/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/host/usr
--build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu
--target=mips-buildroot-linux-uclibc --enable-languages=c,c++
--with-sysroot=/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/host/usr/mips-buildroot-linux-uclibc/sysroot
--with-build-time-tools=/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/host/usr/mips-buildroot-linux-uclibc/bin
--disable-__cxa_atexit --enable-target-optspace --disable-libgomp --with-gnu-ld
--disable-libssp --disable-multilib --enable-tls --enable-shared
--with-gmp=/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/host/usr
--with-mpfr=/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/host/usr
--with-mpc=/vol/cm/perforce/workspace/tmoschca_luzifer_buildroot/bld_mips32/buildroot-2013.02/output/host/usr
--disable-nls --enable-threads --disable-decimal-float --with-float=soft
--with-abi=32 --with-tune=mips32 --with-pkgversion='Buildroot 2013.02'
--with-bugurl=http://bugs.buildroot.net/
Thread model: posix
gcc version 4.6.3 (Buildroot 2013.02)
COLLECT_GCC_OPTIONS='-v' '-fno-strict-aliasing' '-O2' '-Wall' '-Wextra' '-g'
'-fwrapv' '-save-temps' '-o' 'test_gccbug' '-mtune=mips32' '-mabi=32'
'-msoft-float' '-mllsc' '-mno-synci' '-mno-shared'
 /tmp/tlc/usr/bin/../libexec/gcc/mips-buildroot-linux-uclibc/4.6.3/cc1 -E
-quiet -v -iprefix
/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/ -isysroot
/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot test.c -mtune=mips32
-mabi=32 -msoft-float -mllsc -mno-synci -mno-shared -Wall -Wextra
-fno-strict-aliasing -fwrapv -g -fworking-directory -O2 -fpch-preprocess -o
test.i
ignoring duplicate directory
"/tmp/tlc/usr/bin/../lib/gcc/../../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/include"
ignoring nonexistent directory
"/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/local/include"
ignoring duplicate directory
"/tmp/tlc/usr/bin/../lib/gcc/../../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/include-fixed"
ignoring duplicate directory
"/tmp/tlc/usr/bin/../lib/gcc/../../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/../../../../mips-buildroot-linux-uclibc/include"
#include "..." search starts here:
#include <...> search starts here:
 /tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/include
 /tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/include-fixed

/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/../../../../mips-buildroot-linux-uclibc/include
 /tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-fno-strict-aliasing' '-O2' '-Wall' '-Wextra' '-g'
'-fwrapv' '-save-temps' '-o' 'test_gccbug' '-mtune=mips32' '-mabi=32'
'-msoft-float' '-mllsc' '-mno-synci' '-mno-shared'
 /tmp/tlc/usr/bin/../libexec/gcc/mips-buildroot-linux-uclibc/4.6.3/cc1
-fpreprocessed test.i -quiet -dumpbase test.c -mtune=mips32 -mabi=32
-msoft-float -mllsc -mno-synci -mno-shared -auxbase test -g -O2 -Wall -Wextra
-version -fno-strict-aliasing -fwrapv -o test.s
GNU C (Buildroot 2013.02) version 4.6.3 (mips-buildroot-linux-uclibc)
        compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-52), GMP
version 5.1.0, MPFR version 3.1.1-p2, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C (Buildroot 2013.02) version 4.6.3 (mips-buildroot-linux-uclibc)
        compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-52), GMP
version 5.1.0, MPFR version 3.1.1-p2, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 5822c094c058915fedc3c193375772d1
COLLECT_GCC_OPTIONS='-v' '-fno-strict-aliasing' '-O2' '-Wall' '-Wextra' '-g'
'-fwrapv' '-save-temps' '-o' 'test_gccbug' '-mtune=mips32' '-mabi=32'
'-msoft-float' '-mllsc' '-mno-synci' '-mno-shared'

/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/../../../../mips-buildroot-linux-uclibc/bin/as
-EB -O2 -g -no-mdebug -mabi=32 -mno-shared -mtune=mips32 -KPIC -o test.o test.s
COMPILER_PATH=/tmp/tlc/usr/bin/../libexec/gcc/mips-buildroot-linux-uclibc/4.6.3/:/tmp/tlc/usr/bin/../libexec/gcc/:/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/../../../../mips-buildroot-linux-uclibc/bin/
LIBRARY_PATH=/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/:/tmp/tlc/usr/bin/../lib/gcc/:/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/../../../../mips-buildroot-linux-uclibc/lib/:/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/lib/:/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-fno-strict-aliasing' '-O2' '-Wall' '-Wextra' '-g'
'-fwrapv' '-save-temps' '-o' 'test_gccbug' '-mtune=mips32' '-mabi=32'
'-msoft-float' '-mllsc' '-mno-synci' '-mno-shared'
 /tmp/tlc/usr/bin/../libexec/gcc/mips-buildroot-linux-uclibc/4.6.3/collect2
--sysroot=/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot
--eh-frame-hdr -EB -dynamic-linker /lib/ld-uClibc.so.0 -o test_gccbug
/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/lib/crt1.o
/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/lib/crti.o
/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/crtbegin.o
-L/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3
-L/tmp/tlc/usr/bin/../lib/gcc
-L/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/../../../../mips-buildroot-linux-uclibc/lib
-L/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/lib
-L/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/lib test.o -lgcc
--as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed
/tmp/tlc/usr/bin/../lib/gcc/mips-buildroot-linux-uclibc/4.6.3/crtend.o
/tmp/tlc/usr/bin/../mips-buildroot-linux-uclibc/sysroot/usr/lib/crtn.o


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