Re: [RFC] bloody mess with __attribute__() syntax

Josh Triplett
2007-07-05T21:09:22Z

On Thu, 2007-07-05 at 21:08 +0100, Al Viro wrote:
> On Thu, Jul 05, 2007 at 12:35:53PM -0700, Josh Triplett wrote:
> > OK, that seems inconsistent with what you said before. You said that
> > T __attribute__((foo)) *v;
>
> ... in gcc.
>
> > gives you a foo-pointer-to-T. So shouldn't
> > int __attribute__((noderef)) *v;
> > give you a noderef-pointer-to-int?
>
> ... if we followed gcc rules.

Ah, OK.

> > However, noderef seems like a property of a pointer, hence why I
> > proposed the example I did. A warning should occur when you do
> > *(<noderef T *>v) to get a T, not when you do *(<* noderef T>v) to get a
> > noderef T.
>
> Nope. __noderef is a property of object being pointed to. Again,
> consider &p->x. It should not be int *. And it should not be
> an error. We want it to be int __noderef *.
>
> Semantics of noderef is simple: you should not access or modify the value
> of noderef object. That's all. int __noderef * is an absolutely normal
> pointer to such object. Think of __noderef as of a stronger variant of const.

OK. It hadn't occurred to me that "noderef int x" could have any useful
meaning on its own, but you've given a clear explanation of why it does,
which makes it meaningful to apply noderef to the pointer target rather
than the pointer. Thanks.

- Josh Triplett