PR19352 getLocation() points to the wrong position for FriendDecls

Manuel Klimek klimek at google.com
Tue Apr 29 00:35:39 PDT 2014


+richard

This makes sense to me, but I don't understand the code well enough to
approve... Looping in Richard for an expert opinion ;)


On Tue, Apr 29, 2014 at 5:13 AM, Nikola Smiljanic <popizdeh at gmail.com>wrote:

> Ping.
>
>
> On Wed, Apr 16, 2014 at 8:38 PM, Nikola Smiljanic <popizdeh at gmail.com>wrote:
>
>> LocStart in CheckFriendTypeDecl is the start of DeclSpec range. This is
>> OK for checking that declaration starts with 'friend' keyword but is
>> redundant when it comes to FriendDecl creation. Location of the keyword is
>> already passed as FriendLoc.
>>
>> I've added another parameter to this function that points to location of
>> the type from the declaration. The call to CheckFriendTypeDecl from
>> SemaTemplateInstantiateDecl now isn't technically correct because it's
>> passing the the type location as LocStart. But the error that's checked for
>> using this parameter can only happen inside class declaration, not
>> instantiated template, I think :)
>>
>> Is there a way to test this? I'm not seeing any regressions.
>>
>> struct A{};
>> typedef A Atypedef;
>>
>> namespace ns { struct B{}; }
>>
>>  template <typename T>
>> class C
>> {
>> friend class A; // points to A
>> friend Atypedef; // points to Atypedef
>> friend T; //  points to T
>> friend decltype(whatever); // points to decltype
>> friend ns::B; // points to B
>> friend typename T::something; // points to something
>> }
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140429/a99375b8/attachment.html>


More information about the cfe-commits mailing list