r264428 - [ASTMatchers] Fix build for VariadicFunction.
Samuel Benzaquen via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 31 08:43:35 PDT 2016
On Thu, Mar 31, 2016 at 11:16 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Yep, reproduces even with a plain (non template arg) function pointer -
> and immediately goes away with a real function of the same type.
>
Thanks for the extra reduction.
> That's bothersome. I played around with a few ways of writing the
> call-to-function-pointer but couldn't find any particular syntax that
> seemed to untickle GCC's problem here. Maybe if you find the filed GCC bug
> there might be a workaround listed (if it's been filed/investigated
> already).
>
I couldn't not find a bug for it. Maybe someone with a little experience in
bugzilla has a little more luck?
>
> On Thu, Mar 31, 2016 at 6:53 AM, Samuel Benzaquen <sbenza at google.com>
> wrote:
>
>> I was able to reduce the bug to this:
>>
>> struct A {
>>
>> A(int (&)[1]);
>>
>> };
>>
>> template <int (*F)(A)>
>>
>> int E() {
>>
>> int X[] = {0};
>>
>> return F(X);
>>
>> }
>>
>>
>> Note that the array is not empty and we are not using variadics anymore.
>> The problem seems to be related to the function pointer template
>> parameter.
>> gcc doesn't want to do the implicit conversion from X to A, but if I make
>> the conversion explicit it works.
>>
>>
>> On Fri, Mar 25, 2016 at 1:58 PM, Alexey Samsonov <vonosmas at gmail.com>
>> wrote:
>>
>>>
>>> On Fri, Mar 25, 2016 at 10:55 AM, David Blaikie via cfe-commits <
>>> cfe-commits at lists.llvm.org> wrote:
>>>
>>>>
>>>>
>>>> On Fri, Mar 25, 2016 at 10:46 AM, Samuel Benzaquen via cfe-commits <
>>>> cfe-commits at lists.llvm.org> wrote:
>>>>
>>>>> Author: sbenza
>>>>> Date: Fri Mar 25 12:46:02 2016
>>>>> New Revision: 264428
>>>>>
>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=264428&view=rev
>>>>> Log:
>>>>> [ASTMatchers] Fix build for VariadicFunction.
>>>>>
>>>>> Under some conditions the implicit conversion from array to ArrayRef<>
>>>>> is not working.
>>>>>
>>>>
>>>> Any idea what those conditions are?
>>>>
>>>
>>> This was causing the build failure with opt GCC. I will try to create a
>>> smaller reproducer later today.
>>>
>>>
>>>>
>>>>
>>>>> Fix the build by making it explicit.
>>>>>
>>>>> Modified:
>>>>> cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h
>>>>>
>>>>> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h?rev=264428&r1=264427&r2=264428&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h
>>>>> (original)
>>>>> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h Fri Mar
>>>>> 25 12:46:02 2016
>>>>> @@ -90,7 +90,7 @@ private:
>>>>> // before we make the array.
>>>>> template <typename... ArgsT> ResultT Execute(const ArgsT &... Args)
>>>>> const {
>>>>> const ArgT *const ArgsArray[] = {&Args...};
>>>>> - return Func(ArgsArray);
>>>>> + return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
>>>>> }
>>>>> };
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> cfe-commits mailing list
>>>>> cfe-commits at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>
>>>>
>>>
>>>
>>> --
>>> Alexey Samsonov
>>> vonosmas at gmail.com
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160331/b04a196c/attachment.html>
More information about the cfe-commits
mailing list