[Bug ada/37038] New: Bogus warning from GCC
sam at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Aug 6 14:49:00 GMT 2008
With trunk GCC, SVN revision 138798.
The following program (t.adb), when compiled with "gcc -O2", gives:
t.adb: In function ÂTÂ:
t.adb:6: warning: comparison always false due to limited range of data type
(probably emitted by the backend as "-gnatv" doesn't show the caret position)
Note that the warning points onto the line containing 'Pos, not the comparison
itself. And this is bogus, as if "X" contains "2#11xxxxxx#" (two high bits
set), then right shifting it by 6 positions (it is unsigned) will give "3",
which corresponds to "White".
Moreover, despites the warning, the generated code is correct and returns "0"
when the two high bits are set and "1" otherwise.
with Interfaces; use Interfaces;
function T (X : Unsigned_8) return Integer
is
type Color is (None, Red, Blue, White);
V : constant Color := Color'Val (Shift_Right (X, 6));
begin
if V = White then
return 0;
else
return 1;
end if;
end T;
--
Summary: Bogus warning from GCC
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: ada
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: sam at gcc dot gnu dot org
GCC host triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37038
More information about the Gcc-bugs
mailing list