aaron.ballman added inline comments.
================
Comment at: lib/Sema/SemaDecl.cpp:11958-11962
+ // The type location may be attributed; strip the attributes to get to
+ // the function type location.
+ while (auto ATL = TL.getAs<AttributedTypeLoc>()) {
+ TL = ATL.getModifiedLoc();
+ }
----------------
rnk wrote:
> rsmith wrote:
> > Again, I don't like having this knowledge about what kinds of type sugar
> > can appear in a function declaration hardcoded here. Please put this
> > somewhere more central.
> >
> > A quick look finds that `FunctionDecl::getReturnTypeSourceRange()` gets
> > this wrong in the opposite direction: it skips parens but not attributes.
> > Maybe we should have a `TypeLoc::getAsAdjusted<T>` or similar, that walks
> > over type sugar nodes that represent some kind of type adjustment from a
> > type that was written as a T to another type that is still canonically a T
> > (`ParenType`, `AttributedType`, `ElaboratedType`).
> What about AdjustedType? You would see that in this case:
> template <typename T> struct A {
> T A::*method; // adjusted to __thiscall on i686-windows
> };
> template struct A<void()>;
> Do you want to look through the __thiscall adjustment?
Can you get an `AdjustedType` in C? Both of my uses are gated by if
!LangOpts.CPlusPlus, so I'm not certain whether `AdjustedType` makes sense or
not (but I'm also a bit unfamiliar with `AdjustedType`). From the description,
it sounds like it might be reasonable to add.
https://reviews.llvm.org/D28166
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits