From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8688 invoked by alias); 11 Aug 2005 08:08:52 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 8655 invoked by uid 48); 11 Aug 2005 08:08:42 -0000 Date: Thu, 11 Aug 2005 08:08:00 -0000 From: "lindig at cs dot uni-sb dot de" To: gcc-bugs@gcc.gnu.org Message-ID: <20050811080838.23324.lindig@cs.uni-sb.de> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c/23324] New: unsigned bitfield in struct not passed correctly as argument X-Bugzilla-Reason: CC X-SW-Source: 2005-08/txt/msg01172.txt.bz2 List-Id: 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 "" # 1 "" # 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