[cfe-dev] Problem with a change on newFrontendActionFactory

Nico Weber thakis at chromium.org
Thu May 1 13:19:25 PDT 2014


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.

> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev



More information about the cfe-dev mailing list