------- Comment #10 from ebotcazou at gcc dot gnu dot org 2006-03-30 07:58
-------
> Looks like the same bug that Gigi doesn't currently use VIEW_CONVERT_EXPR
> for this type of Unchecked_Conversion. So already on my plate.
I think it's worse, the problematic function reads:
function c35507m__charRP (A : c35507m__char; F : boolean) return
integer is
begin
if system__unsigned_types__unsigned!(A) in 4 .. 5 then
return integer(system__unsigned_types__unsigned!(A) - 4);
else
[constraint_error when F "invalid data"]
return -1;
end if;
end c35507m__charRP;
I'm not sure a VIEW_CONVERT_EXPR will be sufficient because of the type of A.
<function_decl 0x55722080 c35507m__charRP
type <function_type 0x55729b24
type <integer_type 0x557299b4 integer type <integer_type 0x556e5284
integer>
sizes-gimplified public visited SI
size <integer_cst 0x556d73d8 constant invariant 32>
unit size <integer_cst 0x556d7168 constant invariant 4>
user align 32 symtab 0 alias set 0 precision 32 min <integer_cst
0x556d7390 -2147483648> max <integer_cst 0x556d73a8 2147483647> RM size
<integer_cst 0x556d73d8 32>>
readonly QI
size <integer_cst 0x556d71e0 constant invariant 8>
unit size <integer_cst 0x556d71f8 constant invariant 1>
align 8 symtab 0 alias set -1
arg-types <tree_list 0x557280f0 value <enumeral_type 0x55729a10
c35507m__char>
chain <tree_list 0x55728108 value <enumeral_type 0x55729a6c
boolean>
chain <tree_list 0x55728120 value <void_type 0x556e56d4
void>>>>
pointer_to_this <pointer_type 0x5572e2e0>>
readonly addressable static QI file c35507m.adb line 5 context
<function_decl 0x55722000 c35507m> initial <block 0x556e31d4>
arguments <parm_decl 0x557250f0 A
type <enumeral_type 0x55729a10 c35507m__char readonly sizes-gimplified
unsigned QI size <integer_cst 0x556d71e0 8> unit size <integer_cst 0x556d71f8
1>
user align 8 symtab 0 alias set -1 precision 8 min <integer_cst
0x5571ae70 4> max <integer_cst 0x5571afd8 5>
RM size <integer_cst 0x5571ad68 constant invariant 3>>
readonly unsigned QI file c35507m.adb line 5 size <integer_cst
0x556d71e0 8> unit size <integer_cst 0x556d71f8 1>
align 8 context <function_decl 0x55722080 c35507m__charRP> initial
<integer_type 0x556e5284 integer>
So c35507m__charRP "converts" its argument to c35507m__char before the check
that would allow it to do so! Exactly the same issue as the one we have
recently addressed in convert_with_check.
I think it's a front-end problem and the argument of c35507m__charRP should be
in the base type.
--
ebotcazou at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|kenner at gcc dot gnu dot |ebotcazou at gcc dot gnu dot
|org |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26797