On Tue, 2005-05-24 at 20:27 -0400, DJ Delorie wrote:
> > This is still not an answer to the question I originally asked - do you
> > see any way IN C to write code which has the relevant property of the
> > class above (that is, that the FOOmode constants are not accessible
> > except to authorized code) and which does not rely on free conversion
> > between enumeration constants and integral types?
> 
> enum {
>   TVQ_BAR_GRILL = (DATESTAMP % 10),
>   TVQ_NEXT2,
>   TVQ_NEXT3,
>   TVQ_NEXT4
> } TheValQuux;
> 
> It's evil, but it will keep programmers from hard-coding integer
> constants anywhere.  The "constants" will need to be different every
> day.

This doesn't do what I want at all.  The goal is to make the *symbolic
enumeration constants* inaccessible to most code.

Think about how machine_mode values are used.  Almost the entire
compiler is supposed to treat them as opaque things.  You get them from
e.g. int_mode_for_size; you may iterate over a class with
GET_MODE_WIDER_MODE; you stash them in RTL and you pass them to
predicates.  Appearances of "SImode" in the machine-independent compiler
are usually bugs.  This is a major contributing factor to the brokenness
of ports that don't set BITS_PER_UNIT==8.

The goal is to make "SImode" and its friends inaccessible in the
machine-independent compiler, so that that category of bugs cannot
arise.

zw


Reply via email to