On Thu, 18 Nov 2010, Joern Rennecke wrote:

> Maybe you should talk more with your colleagues.  I had protested when the
> CUMULATIVE_ARGS taking vectors were added to targetm, and I was told they'd
> be changed to taking void *, thus eliminating the problem.
> Now people don't want void * because it lacks type safety.  So these hooks
> are really in the wrong place now.  The target vector is a farce because

You can perfectly well do type safety without using void *.

struct cumulative_args;
type hook(struct cumulative_args *arg);


static inline struct x86_cumulative_args *
x86_get_cumulative_args (struct cumulative_args *arg)
{ 
  return (struct x86_cumulative_args *) arg;
}

and then use x86_get_cumulative_args in the hook implementations to 
convert the target-independent type to the target-dependent one, keeping 
the cast in one place per target only.  Or many other variations that 
involve an opaque type, not void *, in the target-independent code.

> you can only use it if you include a header file that includes tm.h,
> so target macro use can creep in undetected.

Yes, that should indeed be fixed.  You don't need to split up the target 
vector to do so.

> And target vectors of different targets are not type compatible, thus
> a front end has to be compiled for a particular target for standards
> compliance.

Yes, that should indeed be fixed.  You don't need to split up the target 
vector to do so, just give the hooks suitable types (and I think they 
should be given target-independent types whether or not you split it up).

> Are you willing to do a review of:
> http://gcc.gnu.org/ml/gcc-patches/2010-11/msg01813.html ?

That does not appear to be a patch in areas that I maintain.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to