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++/42976] New: Illegal translation for IF operator


//Nouse skiped
                // test for holdkey
                if(keybuf.keys!=keys.keys) {
 20c:    20 91 fa 00     lds    r18, 0x00FA
 210:    30 91 fb 00     lds    r19, 0x00FB
 214:    40 91 fc 00     lds    r20, 0x00FC
 218:    50 91 fd 00     lds    r21, 0x00FD
 21c:    80 91 04 01     lds    r24, 0x0104
 220:    90 91 05 01     lds    r25, 0x0105
 224:    a0 91 06 01     lds    r26, 0x0106
 228:    b0 91 07 01     lds    r27, 0x0107
 22c:    28 17           cp    r18, r24
 22e:    39 07           cpc    r19, r25
 230:    4a 07           cpc    r20, r26
 232:    5b 07           cpc    r21, r27
 234:    e1 f0           breq    .+56         ; 0x26e <__stack+0xf>

is illegal

                // test for presskey
                if(keybuf.keys) {
 26e:    80 91 fa 00     lds    r24, 0x00FA
 272:    90 91 fb 00     lds    r25, 0x00FB
 276:    a0 91 fc 00     lds    r26, 0x00FC
 27a:    b0 91 fd 00     lds    r27, 0x00FD
 27e:    00 97           sbiw    r24, 0x00    ; 0
 280:    a1 05           cpc    r26, r1
 282:    b1 05           cpc    r27, r1
 284:    79 f1           breq    .+94         ; 0x2e4 <__stack+0x85>

is illegal

[user@localhost Documents]$ cat bugif.c
#include <avr/io.h>

int main(void) {
    volatile uint16_t a=8,b=7;
a++;
b++;
if(a==b) a++;
if(b) b++;
return 0;
}
[user@localhost Documents]$ avr-gcc -Wall -Werror -g -Os -o bugif.elf -mint8
-I/usr/include/avr -mmcu=atmega8535 bugif.c; avr-objdump -S -h bugif.elf
>bugif.S

  8c:    8b 83           std    Y+3, r24    ; 0x03
if(a==b) a++;
  8e:    29 81           ldd    r18, Y+1    ; 0x01
  90:    3a 81           ldd    r19, Y+2    ; 0x02
  92:    8b 81           ldd    r24, Y+3    ; 0x03
  94:    9c 81           ldd    r25, Y+4    ; 0x04
  96:    28 17           cp    r18, r24
  98:    39 07           cpc    r19, r25
  9a:    29 f4           brne    .+10         ; 0xa6 <main+0x44>

is illegal

  9c:    89 81           ldd    r24, Y+1    ; 0x01
  9e:    9a 81           ldd    r25, Y+2    ; 0x02
  a0:    01 96           adiw    r24, 0x01    ; 1
  a2:    9a 83           std    Y+2, r25    ; 0x02
  a4:    89 83           std    Y+1, r24    ; 0x01
if(b) b++;
  a6:    8b 81           ldd    r24, Y+3    ; 0x03
  a8:    9c 81           ldd    r25, Y+4    ; 0x04
  aa:    89 2b           or    r24, r25
  ac:    29 f0           breq    .+10         ; 0xb8 <main+0x56>

is right

  ae:    8b 81           ldd    r24, Y+3    ; 0x03
  b0:    9c 81           ldd    r25, Y+4    ; 0x04
  b2:    01 96           adiw    r24, 0x01    ; 1
  b4:    9c 83           std    Y+4, r25    ; 0x04
  b6:    8b 83           std    Y+3, r24    ; 0x03
return 0;


c:\WinAVR-20100110\bin>avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../gcc-4.3.3/configure --enable-win32-registry=WinAVR-20100110
--with-gmp=/usr/local --with-mpfr=/usr/local --prefix=/c/WinAVR --target=avr
--e
nable-languages=c,c++,objc --with-dwarf2 --enable-doc --disable-shared
--disable
-libada --disable-libssp --disable-nls --with-pkgversion='WinAVR 20100110'
--wit
h-bugurl='URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=br
owse'
Thread model: single
gcc version 4.3.3 (WinAVR 20100110)


-- 
           Summary: Illegal translation for IF operator
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: blocker
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kharpost at rambler dot ru
 GCC build triplet: avr
  GCC host triplet: i386
GCC target triplet: avr


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


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