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

Reply via email to