Hi Richard, What does all of this suggest to you about the right design?
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" <[email protected]> > To: "Hal Finkel" <[email protected]>, > [email protected] > Cc: [email protected], "aaron ballman" <[email protected]>, > [email protected], [email protected] > 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" <[email protected]> > >> To: [email protected], "aaron ballman" <[email protected]>, > >> [email protected], [email protected], "a > >> bataev" <[email protected]> > >> Cc: [email protected] > >> 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 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
