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/23324] New: unsigned bitfield in struct not passed correctly as argument


The following (generated) code fails an assertion that checks that values passed to a function are 
received correctly. This fails for one value: 

./gcc-4.1.1-ppc-cpp 
gcc-4.1.1-ppc.c:140: failed assertion `yv7.mv7 == dp7.mv7'
Abort trap

The particular value is an unsigned bitfield as part of a struct. The bug is likely to be related to inlining. 
The bug is detected in caller_bf7 but does not occur when the call to caller_bf6 is removed.

int main( int argc, char **argv )
{
    caller_bf6 ();
    caller_bf7 ();
    return errors;
}

To reproduce the bug compile and run the attached code:

: tmp; /scratch/lindig/bin/gcc -O2 -o gcc-4.1.1-ppc-cpp gcc-4.1.1-ppc-cpp.c
: tmp; ./gcc-4.1.1-ppc-cpp 
gcc-4.1.1-ppc.c:140: failed assertion `yv7.mv7 == dp7.mv7'
Abort trap

: tmp; /scratch/lindig/bin/gcc -v
Using built-in specs.
Target: powerpc-apple-darwin7.9.0
Configured with: ../gcc/configure --prefix=/scratch/lindig --enable-languages=c : (reconfigured) ../
gcc/configure --prefix=/scratch/lindig --enable-languages=c : (reconfigured) ../gcc/configure --
prefix=/scratch/lindig --enable-languages=c --no-create --no-recursion
Thread model: posix
gcc version 4.1.0 20050810 (experimental)

The code was generated by my test-code generator Quest: 
http://www.st.cs.uni-sb.de/~lindig/src/quest/index.html

I have reported the bug yesterday using gccbug but did not receive an email confirming the report. 
Therefore I'm filing it here again because I did not find it in the bug database.

# 1 "gcc-4.1.1-ppc.c"
# 0 "<built-in>"
# 1 "<command line>"
# 1 "gcc-4.1.1-ppc.c"
# 15 "gcc-4.1.1-ppc.c"
# 1 "/usr/include/assert.h" 1 3 4
# 45 "/usr/include/assert.h" 3 4
extern void __eprintf (const char *, const char *, unsigned, const char *)
    __attribute__ ((noreturn));
# 16 "gcc-4.1.1-ppc.c" 2





# 1 "/scratch/lindig/lib/gcc/powerpc-apple-darwin7.9.0/4.1.0/include/stdarg.h" 1 3 4
# 43 "/scratch/lindig/lib/gcc/powerpc-apple-darwin7.9.0/4.1.0/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 105 "/scratch/lindig/lib/gcc/powerpc-apple-darwin7.9.0/4.1.0/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 22 "gcc-4.1.1-ppc.c" 2

extern int printf (char *, ...);
static int errors = 0;
static void failed( int line )
{ printf ("failed in %s: %d\n", "gcc-4.1.1-ppc.c", line); errors++; }
static union at6 { } vv6 = { };
static
struct et6
{
    struct bt6
    {
        signed av6:6;
        signed bv6:7;
        signed cv6:6;
        signed dv6:5;
        unsigned char ev6;
        unsigned int fv6;
        long int gv6;
    }
    mv6;
    unsigned long int nv6;
    signed ov6:12;
    signed pv6:3;
    signed qv6:2;
    signed rv6:10;
    union ct6 { long int hv6; float iv6; float jv6; } sv6;
    int *tv6;
    union dt6 { double kv6; float lv6; } uv6;
}
wv6
=
    {
        { 8, 9, 2, 4, '\x10', 67426805U, 1047191860L },
        1366022414UL,
        858,
        1,
        1,
        305,
        { 1069379046L },
        (int *) 358273621U,
        { 3318.041978 }
    };
static double xv6 = 19239.101269;
static long long int yv6 = 1207859169L;
static int zv6 = 660195606;
static
union at6
callee_af6( struct et6 ap6, double bp6, long long int cp6, int dp6 )
{

    ((void) ((wv6.mv6.av6 == ap6.mv6.av6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 72, "wv6.mv6.av6 == ap6.mv6.av6"), 0)));
    ((void) ((wv6.mv6.bv6 == ap6.mv6.bv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 73, "wv6.mv6.bv6 == ap6.mv6.bv6"), 0)));
    ((void) ((wv6.mv6.cv6 == ap6.mv6.cv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 74, "wv6.mv6.cv6 == ap6.mv6.cv6"), 0)));
    ((void) ((wv6.mv6.dv6 == ap6.mv6.dv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 75, "wv6.mv6.dv6 == ap6.mv6.dv6"), 0)));
    ((void) ((wv6.mv6.ev6 == ap6.mv6.ev6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 76, "wv6.mv6.ev6 == ap6.mv6.ev6"), 0)));
    ((void) ((wv6.mv6.fv6 == ap6.mv6.fv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 77, "wv6.mv6.fv6 == ap6.mv6.fv6"), 0)));
    ((void) ((wv6.mv6.gv6 == ap6.mv6.gv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 78, "wv6.mv6.gv6 == ap6.mv6.gv6"), 0)));
    ((void) ((wv6.nv6 == ap6.nv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 79, 
"wv6.nv6 == ap6.nv6"), 0)));
    ((void) ((wv6.ov6 == ap6.ov6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 80, 
"wv6.ov6 == ap6.ov6"), 0)));
    ((void) ((wv6.pv6 == ap6.pv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 81, 
"wv6.pv6 == ap6.pv6"), 0)));
    ((void) ((wv6.qv6 == ap6.qv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 82, 
"wv6.qv6 == ap6.qv6"), 0)));
    ((void) ((wv6.rv6 == ap6.rv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 83, 
"wv6.rv6 == ap6.rv6"), 0)));
    ((void) ((wv6.sv6.hv6 == ap6.sv6.hv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 84, "wv6.sv6.hv6 == ap6.sv6.hv6"), 0)));
    ((void) ((wv6.tv6 == ap6.tv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 85, 
"wv6.tv6 == ap6.tv6"), 0)));
    ((void) ((wv6.uv6.kv6 == ap6.uv6.kv6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 86, "wv6.uv6.kv6 == ap6.uv6.kv6"), 0)));
    ((void) ((xv6 == bp6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 87, "xv6 == 
bp6"), 0)));
    ((void) ((yv6 == cp6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 88, "yv6 == 
cp6"), 0)));
    ((void) ((zv6 == dp6) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 89, "zv6 == 
dp6"), 0)));
    return vv6;
}
static void caller_bf6( )
{
    union at6 bav6;
                           bav6 = callee_af6 (wv6, xv6, yv6, zv6);
}
static unsigned char uv7 = '\x46';
static float vv7 = 96636.982442;
static double wv7 = 28450.711801;
static union ct7 { } xv7 = { };
static
struct et7
{
    struct dt7 { float iv7; unsigned short int jv7; } kv7;
    float lv7[0];
    signed mv7:9;
    short int nv7;
    double ov7;
    float pv7;
}
yv7
=
    { { 30135.996213, 42435 }, { }, 170, 22116, 26479.628148, 4082.960685 };
static
union ft7 { float qv7; float *rv7; unsigned int *sv7; } zv7 =
    { 5042.227886 };
static int bav7 = 1345451862;
static struct gt7 { double tv7; } bbv7 = { 47875.491954 };
static long int bcv7[1] = { 1732133482L };
static long long int bdv7 = 381678602L;
static
unsigned char
callee_af7(
    float ap7,
    double bp7,
    union ct7 cp7,
    struct et7 dp7,
    union ft7 ep7,
    int fp7,
    struct gt7 gp7,
    long int hp7[1],
    long long int ip7
)
{

    ((void) ((vv7 == ap7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 136, "vv7 
== ap7"), 0)));
    ((void) ((wv7 == bp7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 137, "wv7 
== bp7"), 0)));
    ((void) ((yv7.kv7.iv7 == dp7.kv7.iv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 138, "yv7.kv7.iv7 == dp7.kv7.iv7"), 0)));
    ((void) ((yv7.kv7.jv7 == dp7.kv7.jv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-
ppc.c", 139, "yv7.kv7.jv7 == dp7.kv7.jv7"), 0)));
    ((void) ((yv7.mv7 == dp7.mv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 
140, "yv7.mv7 == dp7.mv7"), 0)));
    ((void) ((yv7.nv7 == dp7.nv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 
141, "yv7.nv7 == dp7.nv7"), 0)));
    ((void) ((yv7.ov7 == dp7.ov7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 142, 
"yv7.ov7 == dp7.ov7"), 0)));
    ((void) ((yv7.pv7 == dp7.pv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 
143, "yv7.pv7 == dp7.pv7"), 0)));
    ((void) ((zv7.qv7 == ep7.qv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 144, 
"zv7.qv7 == ep7.qv7"), 0)));
    ((void) ((bav7 == fp7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 145, "bav7 
== fp7"), 0)));
    ((void) ((bbv7.tv7 == gp7.tv7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 
146, "bbv7.tv7 == gp7.tv7"), 0)));
    ((void) ((bcv7[0] == hp7[0]) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 147, 
"bcv7[0] == hp7[0]"), 0)));
    ((void) ((bdv7 == ip7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 148, "bdv7 
== ip7"), 0)));
    return uv7;
}
static void caller_bf7( )
{
    unsigned char bev7;

    bev7 = callee_af7 (vv7, wv7, xv7, yv7, zv7, bav7, bbv7, bcv7, bdv7);
    ((void) ((uv7 == bev7) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "gcc-4.1.1-ppc.c", 156, "uv7 
== bev7"), 0)));
}

int main( int argc, char **argv )
{
    caller_bf6 ();
    caller_bf7 ();
    return errors;
}

-- 
           Summary: unsigned bitfield in struct not passed correctly as
                    argument
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: lindig at cs dot uni-sb dot de
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: powerpc-apple-darwin7.9.0
  GCC host triplet: powerpc-apple-darwin7.9.0
GCC target triplet: powerpc-apple-darwin7.9.0


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


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