Date: Mon, 16 Oct 2023 12:20:24 +0300
Ville Voutilainen wrote:
> On Mon, 16 Oct 2023 at 11:20, Peter Dimov via SG7 <sg7_at_[hidden]>
> wrote:
>
> > I used to argue that unknown attributes should be retained in the AST for
> > reflection purposes, but that actually doesn't give us much, so I dropped it.
> > Annotations work sufficiently differently in that we don't just want the text
> > of the unknown attribute, we want the compiler to evaluate the constant
> > expression and to retain its result in the AST, not its text.
>
> Ah, and then that other implementation vendor will reiterate to us
> that expressions
> in attributes are a serious nuisance for their implementation.
They don't seem to mind parsing arbitrary expressions in __declspec,
so they could probably think of something. E.g. this all works
#define MY_ALIGNMENT 4
constexpr int my_alignment = 4;
constexpr int calc_align( int x ) { return x*x; }
__declspec(align(MY_ALIGNMENT)) int z1;
__declspec(align(my_alignment)) int z2;
__declspec(align(calc_align(2))) int z3;
__declspec(align([](int x){ return x*x;}(2))) int z4;
> So, instead of hastily deeming attributes unsuitable for this purpose,
"Hastily" -> after thinking about the subject for more than two years.
> On Mon, 16 Oct 2023 at 11:20, Peter Dimov via SG7 <sg7_at_[hidden]>
> wrote:
>
> > I used to argue that unknown attributes should be retained in the AST for
> > reflection purposes, but that actually doesn't give us much, so I dropped it.
> > Annotations work sufficiently differently in that we don't just want the text
> > of the unknown attribute, we want the compiler to evaluate the constant
> > expression and to retain its result in the AST, not its text.
>
> Ah, and then that other implementation vendor will reiterate to us
> that expressions
> in attributes are a serious nuisance for their implementation.
They don't seem to mind parsing arbitrary expressions in __declspec,
so they could probably think of something. E.g. this all works
#define MY_ALIGNMENT 4
constexpr int my_alignment = 4;
constexpr int calc_align( int x ) { return x*x; }
__declspec(align(MY_ALIGNMENT)) int z1;
__declspec(align(my_alignment)) int z2;
__declspec(align(calc_align(2))) int z3;
__declspec(align([](int x){ return x*x;}(2))) int z4;
> So, instead of hastily deeming attributes unsuitable for this purpose,
"Hastily" -> after thinking about the subject for more than two years.
Received on 2023-10-16 09:20:28