Dear all,

I must calculate the address of an element's array.
If the size of an element is one integer it's good.
I do like that:
new_rhs=fold_build2(PLUS_EXPR,TREE_TYPE(TREE_OPERAND(rhs,1)),
build1(ADDR_EXPR, build_pointer_type (TREE_TYPE (array)),array),
                       index);

But, if the type of an element is not one integer, I must multiply the index by the size of an element.
I try to do like that :
tree decalage=fold_build2(MULT_EXPR,TREE_TYPE(index),
                                             index,
                                             compteur);
new_rhs=fold_build2(PLUS_EXPR,TREE_TYPE(TREE_OPERAND(rhs,1)), build1(ADDR_EXPR, build_pointer_type (TREE_TYPE (array)),array),
                                    decalage);

new_rhs is a futur parameter of a function call.

When a try to compile a program gcc answer:
"
tab.c:22: erreur: invalid operand to binary operator
i_28 * 4;

tab.c:22: erreur interne du compilateur: verify_stmts failed
"

i_28 is index
4 is compteur

How can I do that ?

Thanks in advance.
Antoine



This is the debug_tree() of new_rhs :
<plus_expr 0x403f6520
   type <integer_type 0x403532d8 int sizes-gimplified public SI
       size <integer_cst 0x40342348 constant invariant 32>
       unit size <integer_cst 0x40342180 constant invariant 4>
align 32 symtab 0 alias set 3 canonical type 0x403532d8 precision 32 min <integer_cst 0x40342300 -2147483648> max <integer_cst 0x40342318 2147483647>
       pointer_to_this <pointer_type 0x4035a680>>
arg 0 <mult_expr 0x403f6500 type <integer_type 0x403532d8 int> arg 0 <ssa_name 0x403ead20 type <integer_type 0x403532d8 int> visited var <var_decl 0x4034e318 i> def_stmt <phi_node 0x403e79a0>
           version 28>
       arg 1 <integer_cst 0x40362df8 constant invariant 4>>
   arg 1 <addr_expr 0x403f1a2c
       type <pointer_type 0x403e38f0 type <array_type 0x403d8f70>
unsigned SI size <integer_cst 0x40342348 32> unit size <integer_cst 0x40342180 4>
           align 32 symtab 0 alias set -1 canonical type 0x403e38f0>
       constant invariant
       arg 0 <var_decl 0x4034e0b0 AAAA type <array_type 0x403d8f70>
           addressable used public static common BLK file tab.c line 7
           size <integer_cst 0x40342b58 constant invariant 320>
           unit size <integer_cst 0x403e1198 constant invariant 40>
           align 256
(mem/s/c:BLK (symbol_ref:SI ("AAAA") <var_decl 0x4034e0b0 AAAA>) [2 AAAA+0 S40 A256]) chain <var_decl 0x4034e108 BBBB>>>>



Reply via email to