This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/23324] New: unsigned bitfield in struct not passed correctly as argument
- From: "lindig at cs dot uni-sb dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Aug 2005 08:08:42 -0000
- Subject: [Bug c/23324] New: unsigned bitfield in struct not passed correctly as argument
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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