This is the mail archive of the gcc@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]

Re: builtin_types_compatible_p and const


On Tue, 26 Feb 2002, Aldy Hernandez wrote:

> >> first, vec_lvsl accepts "char *" not "const char *", so you'll
> >> have to cast.
> >
> > That's about the most annoying thing. What's wrong about loading
> > from a constant address?
> 
> i agree, let's summon the expert again...
> 
> joseph, i agree with daniel.  the code below should compile, but
> x and y are not compatible according to the builtin.  are there
> any objections to making a patch to fix this?
> 
> const char *x;
> char *y;
> int foo[__builtin_types_compatible_p (__typeof(x), __typeof(y)) == 1 ? 
> 1 : -1];

If vec_lvsl accepts "char *" rather than "const char *", presumably it
modifies what's pointed to by its argument (else why wasn't it specified
to use const, unless the interface predates ANSI C89)?

Again, check *x and *y, or explicitly enumerate the variants in the
header.  Or arrange for some built-in function to check for assignability
(which is not the same as compatibility) - in this case, that the target
type of the argument has fewer qualifiers than that of the formal
parameter, so you avoid allowing volatile there - but if you're passing
const, then vec_lvsl should be prototyped to accept it.

-- 
Joseph S. Myers
jsm28@cam.ac.uk


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