------- Comment #1 from eblot dot ml at gmail dot com 2010-05-30 10:36 -------
Update: This is a C++ only bug, the same code in C language does not exhibit
the bug:
# --- Building as C language ---
$> arm-eabi-gcc -c -O2 -mcpu=arm926ej-s -o fopen.o -x c fopen.c -Wextra
-save-temps && cat fopen.s
.cpu arm926ej-s
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 1
.eabi_attribute 30, 2
.eabi_attribute 18, 4
.file "fopen.c"
.text
.align 2
.global open_file
.type open_file, %function
open_file:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
cmp r1, #3
ldrls r3, .L4
movhi r1, #0
ldrls r1, [r3, r1, asl #2]
b open
.L5:
.align 2
.L4:
.word .LANCHOR0
.size open_file, .-open_file
.section .rodata
.align 2
.set .LANCHOR0,. + 0
.type CSWTCH.1, %object
.size CSWTCH.1, 16
CSWTCH.1:
.word 1
.word 74
.word 3
.word 75
.ident "GCC: 4.5.0"
# --- Building as C++ language ---
arm-eabi-gcc -c -O2 -mcpu=arm926ej-s -o fopen.o -x c++ fopen.c -Wextra
-save-temps && cat fopen.s
fopen.c: In function void open_file(const char*, OpenMode):
fopen.c:16:6: warning: comparison always true due to limited range of data type
.cpu arm926ej-s
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 1
.eabi_attribute 30, 2
.eabi_attribute 18, 4
.file "fopen.c"
.text
.align 2
.global _Z9open_filePKc8OpenMode
.type _Z9open_filePKc8OpenMode, %function
_Z9open_filePKc8OpenMode:
.fnstart
.LFB0:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
ldr r3, .L2
sub r1, r1, #1
and r1, r1, #255
ldr r1, [r3, r1, asl #2]
b _Z4openPKci
.L3:
.align 2
.L2:
.word .LANCHOR0
.LFE0:
.cantunwind
.fnend
.size _Z9open_filePKc8OpenMode, .-_Z9open_filePKc8OpenMode
.section .rodata
.align 2
.set .LANCHOR0,. + 0
.type CSWTCH.1, %object
.size CSWTCH.1, 12
CSWTCH.1:
.word 74
.word 3
.word 75
.ident "GCC: 4.5.0"
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44328