[cfe-dev] Problem with a change on newFrontendActionFactory

Manuel Klimek klimek at google.com
Mon May 5 03:10:23 PDT 2014


On Thu, May 1, 2014 at 10:21 PM, Richard Smith <richard at metafoo.co.uk>wrote:

> On Thu, May 1, 2014 at 1:19 PM, Nico Weber <thakis at chromium.org> wrote:
>
>> On Thu, May 1, 2014 at 1:17 PM, David Blaikie <dblaikie at gmail.com> wrote:
>> > On Thu, May 1, 2014 at 1:12 PM, Richard Smith <richard at metafoo.co.uk>
>> wrote:
>> >> On Thu, May 1, 2014 at 12:55 PM, Etienne Ollivier <eollivier at bsu.edu>
>> wrote:
>> >>>
>> >>> Hello,
>> >>> I updated my clang repository recently and I an error appeared that
>> was
>> >>> not
>> >>> there before:
>> >>>
>> >>> error: no viable conversion from
>> 'std::unique_ptr<FrontendActionFactory>'
>> >>> to
>> >>>       'clang::tooling::ToolAction *'
>> >>>         return
>> Tool.run(newFrontendActionFactory<MyPluginASTAction>());
>> >>>                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> >>>
>> >>> It is because newFrontendActionFactory has been changed to work with
>> >>> std::unique_ptr. So if I change my code to
>> >>>    return Tool.run(&(*newFrontendActionFactory<MyPluginASTAction>()));
>> >>
>> >>
>> >> You can use .get() rather than the slightly non-obvious &*.
>> >>
>> >>>
>> >>> it works. The only little problem is that it can be confusing for
>> users
>> >>> since is not the way it is written in the documentation, like on this
>> >>> pages:
>> >>> http://clang.llvm.org/docs/LibTooling.html
>> >>> http://clang.llvm.org/docs/LibASTMatchersTutorial.html
>> >>
>> >>
>> >> Thanks, I've updated the documentation.
>> >
>> > I'm trying to understand how the ownership used to work/is meant to
>> work now...
>>
>> The result of newFrontendActionFactory() used to be leaked. Now it's
>> freed at the end-of-statement cleanup of the returned (invisible)
>> unique_ptr temporary.
>
>
> Why do we need to heap-allocate the FrontendActionFactory at all?
>

Technically we don't. There's just some ways to create the
FrontendActionFactory via templated factory functions that we want to work
with pointers (because they have identity - we want the same one to be
passable to different runs and work with the data).


>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140505/0ff2caa4/attachment.html>


More information about the cfe-dev mailing list