[Patch] PR14995 Too eagerly rejects operator function templates
rahul
1989.rahuljain at gmail.com
Thu Jan 30 10:05:45 PST 2014
Hi Arthur,
Yes it does fix the other two examples as well. I did check them too while working out the fix.
I will add those too once I get a green signal for the fix :)
Thanks,
Rahul
> On 30-Jan-2014, at 11:29 pm, "Arthur O'Dwyer" <arthur.j.odwyer at gmail.com> wrote:
>
> Hi Rahul,
>
> Does your patch fix the other two examples given in PR14995? Perhaps they should also be added as regression tests.
> (Just from eyeballing the code, I think your patch *does* fix them, including my example where the T is dependent on a class template instead of on a function template; but it might be nice to test explicitly.)
>
> LGTM.
>
> –Arthur
>
>
>
>> On Thu, Jan 30, 2014 at 6:55 AM, Rahul Jain <rahul1.jain at samsung.com> wrote:
>>
>>
>> Hi,
>>
>> This patch fixes PR14995 - Too eagerly rejects operator function templates.
>>
>> Please help review the same.
>>
>>
>>
>> Index: lib/Sema/SemaDeclCXX.cpp
>> ===================================================================
>> --- lib/Sema/SemaDeclCXX.cpp (revision 200465)
>> +++ lib/Sema/SemaDeclCXX.cpp (working copy)
>> @@ -10913,7 +10913,11 @@
>> if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
>> ParamIsInt = BT->getKind() == BuiltinType::Int;
>>
>> - if (!ParamIsInt)
>> + bool ParamIsDependent = false;
>> + if (LastParam->getType()->isDependentType())
>> + ParamIsDependent = true;
>> +
>> + if (!ParamIsInt && !ParamIsDependent)
>> return Diag(LastParam->getLocation(),
>> diag::err_operator_overload_post_incdec_must_be_int)
>> << LastParam->getType() << (Op == OO_MinusMinus);
>> Index: test/SemaCXX/overloaded-operator.cpp
>> ===================================================================
>> --- test/SemaCXX/overloaded-operator.cpp (revision 200465)
>> +++ test/SemaCXX/overloaded-operator.cpp (working copy)
>> @@ -452,3 +452,16 @@
>> Result = 1; // expected-error {{no viable overloaded '='}} // expected-note {{type 'PointerUnion<int *, float *>' is incomplete}}
>> }
>> }
>> +
>> +namespace PR14995 {
>> +
>> + struct B {};
>> + template<typename ...T> void operator++(B, T...) {}
>> +
>> + void f() {
>> + B b;
>> + b++; // ok
>> + ++b; // ok
>> + }
>> +}
>> +
>>
>>
>>
>>
>>
>> Thanks,
>>
>> Rahul
>>
>>
>>
>> <201401302024474_BGFC2LL5.gif>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
> _______________________________________________
> 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/20140130/574e5642/attachment.html>
More information about the cfe-commits
mailing list