[PATCH] PR19095 Undefined reference to friend template function defined inside template class

Richard Smith richard at metafoo.co.uk
Fri Apr 11 13:27:00 PDT 2014


Hi!

I'm afraid this patch is incorrect; it even does the wrong thing in your
test case. Skipping the setInstantiatedFromMemberTemplate call causes us to
mix up the template parameter list numbering -- we substitute the argument
given for T as the value U, and we don't substitute anything for T. For
instance, in the definition of f instantiated for the f(3.0) call, we
should have T=double, U=int, but we actually have T=<no value>, U=double,
as can be seen in the AST dump.

This also does the wrong thing if C is instantiated twice -- such a case
should be an error, because f would have multiple definitions.


On Mon, Mar 24, 2014 at 5:29 AM, suyog sarda <sardask01 at gmail.com> wrote:

> Gentle Ping!!
>
>
> On Thu, Mar 20, 2014 at 9:46 AM, suyog sarda <sardask01 at gmail.com> wrote:
>
>> Gentle Ping!!
>>
>>
>> On Fri, Mar 14, 2014 at 10:29 PM, suyog sarda <sardask01 at gmail.com>wrote:
>>
>>> Hi,
>>>
>>> Attaching patch for bug 19095. Please help in reviewing the same.
>>>
>>> Also, I haven't attached a test case yet in the patch as i am not sure
>>> how it should be and in which file it should be.
>>>
>>> In my opinion, the test case would go into *tools/clang/test/SemaCXX/friend.cpp
>>> *would be something like below (similar to that mentioned in the bug)
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> * template <class T>void f(T);template <class U>class C{  template
>>> <class T>  friend void f(T)  {     C<U> c;     c.i = 3;  }  public :
>>> void g()      {       f(3.0); // OK     }    int i;};void h (){  f(7); //
>>> OK  C<double> c;  c.g();}*
>>>
>>>
>>> Please help in reviewing the patch as well as the test case.
>>> --
>>> With regards,
>>> Suyog Sarda
>>>
>>
>>
>>
>> --
>> With regards,
>> Suyog Sarda
>>
>
>
>
> --
> With regards,
> Suyog Sarda
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140411/8a7f3657/attachment.html>


More information about the cfe-commits mailing list