------- 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