public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* I have a bad day, output is not the same, in pointer to unsigned long long int bits field.
@ 2005-08-14 17:59 Fran
2005-08-15 11:51 ` Andrew Pinski
0 siblings, 1 reply; 2+ messages in thread
From: Fran @ 2005-08-14 17:59 UTC (permalink / raw)
To: gcc-bugs
Today seems that I am stupid , but I can not find process difference
between
function raw_to_ull1 and raw_to_ull_11, if you can see the difference
this is not a bug.
/*
Output:
ull.bit_6 = *(raw + len - 2) = #
ull.bit_7 = *(raw + len - 1) = (
--->llu=8960
ull.bit_7 = *(raw + len - 1) = (
ull.bit_6 = *(raw + len - 2) = #
--->llu=9000
CFLAGS=-Wall -O3 -m32 -march=pentium3 -mcpu=pentium3 --ansi
> Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs
> Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
> Thread model: posix
> gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
*/
/* Fco. J. */
#include <stdlib.h>
#include <stdio.h>
typedef struct Ull
{
unsigned char bit_7:8;
unsigned char bit_6:8;
unsigned char bit_5:8;
unsigned char bit_4:8;
unsigned char bit_3:8;
unsigned char bit_2:8;
unsigned char bit_1:8;
unsigned char bit_0:8;
} Num;
unsigned char
raw_to_ull_1 (register unsigned char *raw, unsigned long long int
*number)
{
register struct Ull ull = { 0, 0, 0, 0, 0, 0, 0, 0 };
register unsigned char len;
unsigned long long int *u;
len = strlen (raw);
if ((len > 8) || (len == 0))
{
return (0);
};
u = (unsigned long long int *) &ull;
switch (len)
{
case 8:
printf ("ull.bit_0 = *(raw + len - 8) = %c\n", *(raw + len - 8));
ull.bit_0 = *(raw + len - 8);
case 7:
printf ("ull.bit_1 = *(raw + len - 7) = %c\n", *(raw + len - 7));
ull.bit_1 = *(raw + len - 7);
case 6:
printf ("ull.bit_2 = *(raw + len - 6) = %c\n", *(raw + len - 6));
ull.bit_2 = *(raw + len - 6);
case 5:
printf ("ull.bit_3 = *(raw + len - 5) = %c\n", *(raw + len - 5));
ull.bit_3 = *(raw + len - 5);
case 4:
printf ("ull.bit_4 = *(raw + len - 4) = %c\n", *(raw + len - 4));
ull.bit_4 = *(raw + len - 4);
case 3:
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
case 2:
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
case 1:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
*number = *u;
/* printf ("--> %u,%u,%u,%u,%u,%u,%u,%u --> %llu\n", ull.bit_7,
ull.bit_6, ull.bit_5, ull.bit_4, ull.bit_3, ull.bit_2, ull.bit_1,
ull.bit_0, *u);*/
return 1;
default:
return 0;
};
} unsigned char
raw_to_ull_11 (unsigned char *raw, unsigned long long int *number)
{
struct Ull ull = { 0, 0, 0, 0, 0, 0, 0, 0 };
register unsigned char len;
unsigned long long int *u;
len = strlen (raw);
if ((len > 8) || (len == 0))
{
return (0);
};
u = (unsigned long long int *) &ull;
switch (len)
{
case 1:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
*number = *u;
return 1;
case 2:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
*number = *u;
return 1;
case 3:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
*number = *u;
return 1;
case 4:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
printf ("ull.bit_4 = *(raw + len - 4) = %c\n", *(raw + len - 4));
ull.bit_4 = *(raw + len - 4);
*number = *u;
return 1;
case 5:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
printf ("ull.bit_4 = *(raw + len - 4) = %c\n", *(raw + len - 4));
ull.bit_4 = *(raw + len - 4);
printf ("ull.bit_3 = *(raw + len - 5) = %c\n", *(raw + len - 5));
ull.bit_3 = *(raw + len - 5);
*number = *u;
return 1;
case 6:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
printf ("ull.bit_4 = *(raw + len - 4) = %c\n", *(raw + len - 4));
ull.bit_4 = *(raw + len - 4);
printf ("ull.bit_3 = *(raw + len - 5) = %c\n", *(raw + len - 5));
ull.bit_3 = *(raw + len - 5);
printf ("ull.bit_2 = *(raw + len - 6) = %c\n", *(raw + len - 6));
ull.bit_2 = *(raw + len - 6);
*number = *u;
return 1;
case 7:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
printf ("ull.bit_4 = *(raw + len - 4) = %c\n", *(raw + len - 4));
ull.bit_4 = *(raw + len - 4);
printf ("ull.bit_3 = *(raw + len - 5) = %c\n", *(raw + len - 5));
ull.bit_3 = *(raw + len - 5);
printf ("ull.bit_2 = *(raw + len - 6) = %c\n", *(raw + len - 6));
ull.bit_2 = *(raw + len - 6);
printf ("ull.bit_1 = *(raw + len - 7) = %c\n", *(raw + len - 7));
ull.bit_1 = *(raw + len - 7);
*number = *u;
return 1;
case 8:
printf ("ull.bit_7 = *(raw + len - 1) = %c\n", *(raw + len - 1));
ull.bit_7 = *(raw + len - 1);
printf ("ull.bit_6 = *(raw + len - 2) = %c\n", *(raw + len - 2));
ull.bit_6 = *(raw + len - 2);
printf ("ull.bit_5 = *(raw + len - 3) = %c\n", *(raw + len - 3));
ull.bit_5 = *(raw + len - 3);
printf ("ull.bit_4 = *(raw + len - 4) = %c\n", *(raw + len - 4));
ull.bit_4 = *(raw + len - 4);
printf ("ull.bit_3 = *(raw + len - 5) = %c\n", *(raw + len - 5));
ull.bit_3 = *(raw + len - 5);
printf ("ull.bit_2 = *(raw + len - 6) = %c\n", *(raw + len - 6));
ull.bit_2 = *(raw + len - 6);
printf ("ull.bit_1 = *(raw + len - 7) = %c\n", *(raw + len - 7));
ull.bit_1 = *(raw + len - 7);
printf ("ull.bit_0 = *(raw + len - 8) = %c\n", *(raw + len - 8));
ull.bit_0 = *(raw + len - 8);
*number = *u;
return 1;
default:
return 0;
};
}
int
main ()
{
unsigned long long int u;
register unsigned char cont;
unsigned char serial[40];
unsigned int contador;
sprintf (serial, "#(");
if (raw_to_ull_1 (serial, &u) == 0)
{
printf ("Error\n");
};
printf ("--->llu=%llu \n", u);
if (raw_to_ull_11 (serial, &u) == 0)
{
printf ("Error\n");
};
printf ("--->llu=%llu \n", u);
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: I have a bad day, output is not the same, in pointer to unsigned long long int bits field.
2005-08-14 17:59 I have a bad day, output is not the same, in pointer to unsigned long long int bits field Fran
@ 2005-08-15 11:51 ` Andrew Pinski
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Pinski @ 2005-08-15 11:51 UTC (permalink / raw)
To: Fran; +Cc: gcc-bugs
On Aug 14, 2005, at 1:57 PM, Fran wrote:
> u = (unsigned long long int *) &ull;
>
You are violating C aliasing rules. Either use an union or
-fno-strict-aliasing.
-- Pinski
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-08-15 11:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-14 17:59 I have a bad day, output is not the same, in pointer to unsigned long long int bits field Fran
2005-08-15 11:51 ` Andrew Pinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).