[PATCH][Modules][PR26179]

Vassil Vassilev via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 21 09:33:03 PST 2016


ping... (perhaps someone else with commit rights can check it it...)
--Vassil
On 18/01/16 22:07, Vassil Vassilev wrote:
> Thanks! Could you check it in?
> -- Vassil
> On 18/01/16 21:38, Richard Smith via cfe-commits wrote:
>>
>> LGTM
>>
>> On Jan 18, 2016 12:06 PM, "Vassil Vassilev" <vvasilev at cern.ch 
>> <mailto:vvasilev at cern.ch>> wrote:
>>
>>     Attaching v3 of the patch. Added your case to the current test
>>     and fixed my silly non-array mistake.
>>     -- Vassil
>>     On 18/01/16 20:38, Richard Smith wrote:
>>>
>>>     Please also add a test case that your old patch would have
>>>     failed on, such as:
>>>
>>>     m1.h:
>>>     extern int a[];
>>>
>>>     m2.h:
>>>     extern int a[5];
>>>
>>>     x.cc:
>>>     #include "m1.h"
>>>     #include "m2.h"
>>>     int *p = a;
>>>
>>>     On Jan 18, 2016 9:28 AM, "Vassil Vassilev" <vvasilev at cern.ch
>>>     <mailto:vvasilev at cern.ch>> wrote:
>>>
>>>         On 17/01/16 06:34, Douglas Gregor wrote:
>>>
>>>                 On Jan 16, 2016, at 3:41 PM, Vassil Vassilev
>>>                 <vvasilev at cern.ch> wrote:
>>>
>>>                 Hi,
>>>                   Could somebody review the attached patch. It fixes
>>>                 https://llvm.org/bugs/show_bug.cgi?id=26179
>>>                 Many thanks!
>>>                 Vassil
>>>                 <0001-modules-Teach-clang-to-how-to-merge-variable-redecls.patch>
>>>
>>>
>>>             +      // We can get decls with different types on the
>>>             redecl chain. Eg.
>>>             +      // template <typename T> struct S { static T
>>>             Var[]; }; // #1
>>>             +      // template <typename T> T S<T>::Var[sizeof(T)];
>>>             // #2
>>>             +      // Trying to compare #1 and #2 should go through
>>>             their canonical decls.
>>>             +      QualType VarXTy =
>>>             VarX->getCanonicalDecl()->getType();
>>>             +      QualType VarYTy =
>>>             VarY->getCanonicalDecl()->getType();
>>>             +      if (Context.hasSameType(VarXTy, VarYTy))
>>>             +        return true;
>>>
>>>             Completing an incomplete array is (I think) the only
>>>             case in which this can happen. How about checking for
>>>             that case specifically (i.e., it’s okay to have one be
>>>             an incomplete array and the other to be any other kind
>>>             of array with the same element type), rather than a
>>>             blanket check on the canonical declaration types?
>>>
>>>                     - Doug
>>>
>>>         Thanks for the comments. Patch v2 attached.
>>>         -- Vassil
>>>
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160121/b160fa42/attachment.html>


More information about the cfe-commits mailing list