On Wed, Jun 3, 2009 at 5:34 PM, Bingfeng Mei
<b...@broadcom.com> wrote:
> Richard,
> Thanks. I tried your patch and the -fno-tree-ter, and none works. The problem 
> is that
>
>       decl = find_base_decl (TREE_OPERAND (inner, 0));  <--- Cannot find the 
> base declaration, so decl = 0
>
>       if (decl                                  <-- won't be checked
>          && POINTER_TYPE_P (TREE_TYPE (decl))
>          && TYPE_RESTRICT (TREE_TYPE (decl)))
>
>
> The TREE_OPERAND (inner, 0) is:
>
>  <nop_expr 0xf7fc7400
>    type <pointer_type 0xf7fa6870
>        type <integer_type 0xf7f122f4 int sizes-gimplified public SI
>            size <integer_cst 0xf7f0f9d8 constant 32>
>            unit size <integer_cst 0xf7f0f7c4 constant 4>
>            align 32 symtab 0 alias set 2 canonical type 0xf7f122f4 precision 
> 32 min <integer_cst 0xf7f0f984 -2147483648> max <integer_cst 0xf7f0f9a0 
> 2147483647>
>            pointer_to_this <pointer_type 0xf7f18798>>
>        sizes-gimplified public unsigned restrict SI size <integer_cst 
> 0xf7f0f9d8 32> unit size <integer_cst 0xf7f0f7c4 4>
>        align 32 symtab 0 alias set -1 canonical type 0xf7fa6870>
>
>    arg 0 <plus_expr 0xf7fc95e8
>        type <integer_type 0xf7f12438 long unsigned int public unsigned SI 
> size <integer_cst 0xf7f0f9d8 32> unit size <integer_cst 0xf7f0f7c4 4>
>            align 32 symtab 0 alias set -1 canonical type 0xf7f12438 precision 
> 32 min <integer_cst 0xf7f0fa64 0> max <integer_cst 0xf7f0fa48 4294967295>>
>
>        arg 0 <var_decl 0xf7fc4a6c D.1768 type <integer_type 0xf7f12438 long 
> unsigned int>
>            used unsigned ignored SI file tst.c line 1 col 6 size <integer_cst 
> 0xf7f0f9d8 32> unit size <integer_cst 0xf7f0f7c4 4>
>            align 32 context <function_decl 0xf7fa7080 foo>
>            (reg:SI 104 [ D.1768 ])>
>        arg 1 <integer_cst 0xf7fb7bec constant 4>
>        tst.c:7:5>
>    tst.c:7:5>
>
>
> I added the following code. It seems to work for my example and others. Not 
> sure potential hazard with it.
>         ...
>          else if(!decl
>                  && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND(inner, 0)))
>                  && TYPE_RESTRICT (TREE_TYPE (TREE_OPERAND(inner, 0))))
>            {
>               return new_alias_set ();
>            }
>         ....
>

Ah, of course.  As I said - restrict support is broken.

Richard.

Reply via email to