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