> I found this is a bug in my front end because I used the same type for the
> parameters in different functions, so the references to the parameter in
> the structure messed up.
> 
> The thing I want to implement is creating something like this pointers in
> C++ of structure type whose variably modified fields depend on other
> fields.
> 
> So the problem is the reference of this parameter differs from function to
> function, and therefore, in the most straightforward solution, I have to
> deep copy the whole structure for each function, so it can correctly refer
> to the parameter.
> 
> However, I want to avoid the deep copy.
> 
> So, first, I guess it's not safe to share the same PARM_DECL among
> different functions, is it true?

Yes, you cannot share a PARM_DECL.

> If true, is it possible to refer to the first parameter of whatever
> functions in the same way, so I can use the same type built upon that
> reference?

No, I don't think so, at least in GENERIC.  Maybe the C++ front-end has some 
mechanism for "this" though, but I'm no C++ expert.

> And if so, at which stage, I can build such a reference?

If you want to build the type once for all, generically, and instantiate it 
for each function, you'll probably need to go the PLACEHOLDER_EXPR route as 
suggested by Ian.  The idea is to translate S.a in:

  struct S { int a; int b[S.a]; };

as COMPONENT_REF <PLACEHOLDER_EXPR, FIELD_DECL> where PLACEHOLDER_EXPR has the 
type of struct S and FIELD_DECL is a.  This is supported by the middle-end.
Then, in the front-end, each time S.a is used _in the code_, you instantiate 
it by means of SUBSTITUTE_PLACEHOLDER_IN_EXPR.  The middle-end will do the 
same when S.a is implicitly used as the size of the array for example.

See the Ada front-end for practical references (ada/gcc-interface).

-- 
Eric Botcazou

Reply via email to