This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Help with building ADDR_EXPR node


Hi,

I am a student trying to write a plugin that will insert checks before
all dereferences (similar to mudflap). However, I am having trouble
with building addr_expr nodes for such checks.

My check function accepts three parameters: the value being
dereferenced, the size of the object and the address in memory. I am
using the following two lines to get the third address parameter.

addr = build1 (ADDR_EXPR, build_pointer_type (type), t); // t is the
ARRAY_REF node
fold_convert_loc(location, ptr_type_node, addr); // type case to void *

However, this is failing whenever the array_ref contains a
non-constant expression, say like a[i+1]. The specific failure is
inside the expand_expr_real_1 method in the file expr.c. Looks like
such non-constant indices are not allowed at this stage in the
compilation (I've inserted the pass just before lowering to RTL
happens).

My question is, what would be the right way to get the address? I am
looking for something that will preferably work for all dereferences
like MEM_REF, INDIRECT_REF etc.

Appreciate any help on this one.

Thanks,
Zahed


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]