[PATCH] align_value attribute in Clang

Richard Smith richard at metafoo.co.uk
Mon Sep 29 17:50:47 PDT 2014


On Mon, Sep 29, 2014 at 11:36 AM, Hal Finkel <hfinkel at anl.gov> wrote:

> Hi Richard,
>
> What does all of this suggest to you about the right design?
>

One more question. Given:

  typedef int * __attribute__((align_value(32))) *Y;

... does the attribute apply to the outer pointer or the inner pointer? (My
guess: it surprisingly applies to the outer pointer.) If that's the case,
then I think align_value should live entirely outside the type system, in
the same way that __attribute__((aligned)) does. Note that, given:

  typedef int __attribute__((aligned(64))) *p __attribute__((aligned(8)))

p is a 64-byte-aligned pointer to int, not an 8-byte-aligned pointer to a
64-byte-aligned int.

If that's the case, I suggest you model it exactly like AlignedAttr -- as
an attribute on the TypedefDecl -- and look for it explicitly in the cases
where you want to use it by walking the type sugar and looking for a
TypedefDecl.


> FWIW, maybe creating some kind of synthetic typedef type for the return
> value from DeduceTemplateArgumentsByTypeMatch would work?
>
> Thanks again,
> Hal
>
> ----- Original Message -----
> > From: "Alexey Bataev" <a.bataev at hotmail.com>
> > To: "Hal Finkel" <hfinkel at anl.gov>,
> reviews+D4635+public+b7e82bdc1d8c324a at reviews.llvm.org
> > Cc: cfe-commits at cs.uiuc.edu, "aaron ballman" <aaron.ballman at gmail.com>,
> bigcheesegs at gmail.com, richard at metafoo.co.uk
> > Sent: Friday, September 26, 2014 12:26:29 AM
> > Subject: Re: [PATCH] align_value attribute in Clang
> >
> > 1. ICC does not create a new type for type with this attribute. All
> > types are still the same.
> > 2.
> >
> > int n __attribute__((aligned(32)));
> > decltype(&n) - int*.
> >
> >
> > Best regards,
> > Alexey Bataev
> > =============
> > Software Engineer
> > Intel Compiler Team
> >
> > 26.09.2014 4:28, Hal Finkel пишет:
> > > ----- Original Message -----
> > >> From: "Richard Smith" <richard at metafoo.co.uk>
> > >> To: hfinkel at anl.gov, "aaron ballman" <aaron.ballman at gmail.com>,
> > >> bigcheesegs at gmail.com, richard at metafoo.co.uk, "a
> > >> bataev" <a.bataev at hotmail.com>
> > >> Cc: cfe-commits at cs.uiuc.edu
> > >> Sent: Thursday, September 25, 2014 7:06:33 PM
> > >> Subject: Re: [PATCH] align_value attribute in Clang
> > >>
> > >> I'd like some more information about how ICC treats this
> > >> attribute.
> > >> Does it produce a new type? For instance:
> > > I did a quick experiment with icc (ICC) 14.0.1 20131008 (with -Wall
> > > -O3 -pedantic):
> > >
> > >>    typedef int *I32 __attribute__((align_value(32)));
> > >>    typedef int *I64 __attribute__((align_value(64)));
> > >>
> > >>    typedef I32 X; typedef I64 X; // ill-formed?
> > > No diagnostic.
> > >
> > >>    template<typename> struct Y;
> > >>    typedef Y<I32> Z; typedef Y<I64> Z; // ill-formed?
> > > No diagnostic.
> > >
> > >>    extern I32 i32;
> > >>    I64 i64 = i32; // ill-formed? Is an explicit cast required?
> > > No diagnostic.
> > >
> > >>    I32 i32 = i64; // ill-formed? Is there an implicit conversion
> > >>    that
> > >>    discards alignment?
> > > No diagnostic.
> > >
> > > Alexey, can you please comment on the specifics?
> > >
> > >   -Hal
> > >
> > >> ... and if there's an implicit conversion that discards alignment,
> > >> what is its conversion rank?
> > >>
> > >> If I have:
> > >>
> > >>    int n __attribute__((aligned(32)));
> > >>
> > >> ... then what is `decltype(&n)`? Is it `int*`, or `int*
> > >> __attribute__((align_value(32)))`?
> > >>
> > >> http://reviews.llvm.org/D4635
> > >>
> > >>
> > >>
> >
> >
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140929/0557b8d8/attachment.html>


More information about the cfe-commits mailing list