On Sun, Mar 04, 2012 at 01:17:29PM +0100, Vladimir 'φ-coder/phcoder' Serbinenko wrote: > On 01.03.2012 20:15, Lennart Sorensen wrote: > >On Thu, Mar 01, 2012 at 01:37:10PM -0500, Lennart Sorensen wrote: > >>gcc-4.4 -DHAVE_CONFIG_H -I. -I../../../grub-core -I.. -Wall -W > >>-I../../../include -I../include -DGRUB_MACHINE_EMU=1 > >>-DGRUB_MACHINE=POWERPC_EMU -DGRUB_TARGET_CPU_POWERPC=1 -m32 > >>-DGRUB_FILE=\"normal/charset.c\" -I. -I../../../grub-core -I.. -I../../.. > >>-I../../../include -I../include -I../../../grub-core/lib/posix_wrap -Os > >>-Wall -W -Wshadow -Wold-style-declaration -Wold-style-definition > >>-Wpointer-arith -Wundef -Wextra -Waddress -Warray-bounds -Wattributes > >>-Wbuiltin-macro-redefined -Wcast-align -Wchar-subscripts -Wclobbered > >>-Wcomment -Wcoverage-mismatch -Wdeprecated -Wdeprecated-declarations > >>-Wdisabled-optimization -Wdiv-by-zero -Wempty-body -Wendif-labels > >>-Wfloat-equal -Wformat-contains-nul -Wformat-extra-args -Wformat-security > >>-Wformat-y2k -Wignored-qualifiers -Wimplicit > >>-Wimplicit-function-declaration -Wimplicit-int -Winit-self > >>-Wint-to-pointer-cast -Winvalid-pch -Wunsafe-loop-optimizations > >>-Wlogical-op -Wmain -Wmissing-braces -Wmissing-field-initializers > >>-Wmissing-format-attribute -Wmissing-noreturn > -W > >>mudflap -Wmultichar -Wnonnull -Woverflow -Wpacked-bitfield-compat > >>-Wparentheses -Wpointer-arith -Wpointer-to-int-cast -Wreturn-type > >>-Wsequence-point -Wshadow -Wsign-compare -Wstrict-aliasing -Wswitch > >>-Wsync-nand -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized > >>-Wunknown-pragmas -Wunused -Wunused-function -Wunused-label > >>-Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros > >>-Wvolatile-register-var -Wwrite-strings -Wmissing-parameter-type > >>-Wnested-externs -Wstrict-prototypes -Wpointer-sign -g -Wredundant-decls > >>-Wmissing-prototypes -Wmissing-declarations -fno-dwarf2-cfi-asm > >>-fno-asynchronous-unwind-tables -m32 -fno-stack-protector -Werror > >>-DUSE_ASCII_FAILBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1 -ffreestanding > >>-fno-builtin -Wno-redundant-decls -c -o normal/normal_module-charset.o > >>`test -f 'normal/charset.c' || echo '../../../grub-core/'`normal/charset.c > >>cc1: warnings being treated as errors > >>../../../grub-core/normal/charset.c: In function > >>'grub_bidi_line_logical_to_visual': > >>../../../grub-core/normal/charset.c:636: error: cannot optimize possibly > >>infinite loops > >Would using this instead work: > > > >for (i = k - 1; i>= 0&& (unsigned) i> line_start - 1; > > > >After all if i already had to be>=0 then casting it to unsigned has no > >harm, whereas casting line_start to signed could potentially generate > >a very negative number if line_start was very big. > You forget the case line_start = 0. Please try: > - for (i = k - 1; i > (signed) line_start - 1 && i >= 0; > + for (i = k - 1; i >= 0 && (unsigned) i >= line_start;
The compiler objects. Back to the "error: cannot optimize possibly infinite loops" again. The compiler approves of: for (i = k - 1; i >= 0 && (unsigned) i + 1 > line_start; I guess that's because i >=0 and i < 2147483647 (since it was signed), and i+1 hence can't overflow. -- Len Sorensen _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel