[Bug middle-end/21392] Wrong code generated for array of enum with mode attribute

2006-02-15 Thread jde at google dot com


--- Comment #1 from jde at google dot com  2006-02-16 02:26 ---
I was able to reproduce this bug. Indeed the offset is bytewise but the load is
done with a movl (movl foo+2, %eax) Below is the program used to reproduce,
the compiler and flags used, and the resultant output  assembly.

Cheers
-Jeff

[calliope]% cat main.c
#include stdio.h

typedef enum { false, true } bool __attribute__((mode (byte))); 

bool foo[16] = { 1, 0, 1, 0, 1, 0, 1, 0,
 1, 0, 1, 0, 1, 0, 1, 0 } ;

long test (int i)
{
return foo[i];
}

int main(int argc, char*argv[])
{
   printf (foo[2] (should be 1): %d\n, test(2));
   printf (foo[5] (should be 0): %d\n, test(5));
}

[calliope]% i686-piii-linux-gnu-gcc-4.0.1 -O6 main.c -o main ; ./main
foo[2] (should be 1): 0
foo[5] (should be 0): 16777216

[calliope]% cat main.s
.file   main.c
.globl foo
.data
.type   foo, @object
.size   foo, 16
foo:
.long   1
.long   0
.long   1
.long   0
.long   1
.long   0
.long   1
.long   0
.long   1
.long   0
.long   1
.long   0
.long   1
.long   0
.long   1
.long   0
.text
.p2align 4,,15
.globl test
.type   test, @function
test:
pushl   %ebp
movl%esp, %ebp
movl8(%ebp), %eax
popl%ebp
movlfoo(%eax), %eax
ret
.size   test, .-test
.section.rodata.str1.1,aMS,@progbits,1
.LC0:
.string foo[2] (should be 1): %d\n
.LC1:
.string foo[5] (should be 0): %d\n
.text
.p2align 4,,15
.globl main
.type   main, @function
main:
pushl   %ebp
movl%esp, %ebp
subl$8, %esp
movlfoo+2, %eax
andl$-16, %esp
subl$16, %esp
movl$.LC0, (%esp)
movl%eax, 4(%esp)
callprintf
movlfoo+5, %eax
movl$.LC1, 8(%ebp)
movl%eax, 12(%ebp)
leave
jmp printf
.size   main, .-main
.ident  GCC: (GNU) 4.0.1
.section.note.GNU-stack,,@progbits


-- 


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



[Bug middle-end/21392] Wrong code generated for array of enum with mode attribute

2005-05-04 Thread pinskia at gcc dot gnu dot org


-- 
   What|Removed |Added

  Component|c   |middle-end


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


[Bug middle-end/21392] Wrong code generated for array of enum with mode attribute

2005-05-04 Thread pinskia at gcc dot gnu dot org


-- 
   What|Removed |Added

  GCC build triplet|i386-unknown-netbsdelf1.6.2 |
   GCC host triplet|i386-unknown-netbsdelf1.6.2 |


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