<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, May 5, 2014 at 5:14 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, May 5, 2014 at 3:10 AM, Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>> wrote:<br>

> On Thu, May 1, 2014 at 10:21 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>><br>
> wrote:<br>
>><br>
>> On Thu, May 1, 2014 at 1:19 PM, Nico Weber <<a href="mailto:thakis@chromium.org">thakis@chromium.org</a>> wrote:<br>
>>><br>
>>> On Thu, May 1, 2014 at 1:17 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
>>> > On Thu, May 1, 2014 at 1:12 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>><br>
>>> > wrote:<br>
>>> >> On Thu, May 1, 2014 at 12:55 PM, Etienne Ollivier <<a href="mailto:eollivier@bsu.edu">eollivier@bsu.edu</a>><br>
>>> >> wrote:<br>
>>> >>><br>
>>> >>> Hello,<br>
>>> >>> I updated my clang repository recently and I an error appeared that<br>
>>> >>> was<br>
>>> >>> not<br>
>>> >>> there before:<br>
>>> >>><br>
>>> >>> error: no viable conversion from<br>
>>> >>> 'std::unique_ptr<FrontendActionFactory>'<br>
>>> >>> to<br>
>>> >>>       'clang::tooling::ToolAction *'<br>
>>> >>>         return<br>
>>> >>> Tool.run(newFrontendActionFactory<MyPluginASTAction>());<br>
>>> >>>                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
>>> >>><br>
>>> >>> It is because newFrontendActionFactory has been changed to work with<br>
>>> >>> std::unique_ptr. So if I change my code to<br>
>>> >>>    return<br>
>>> >>> Tool.run(&(*newFrontendActionFactory<MyPluginASTAction>()));<br>
>>> >><br>
>>> >><br>
>>> >> You can use .get() rather than the slightly non-obvious &*.<br>
>>> >><br>
>>> >>><br>
>>> >>> it works. The only little problem is that it can be confusing for<br>
>>> >>> users<br>
>>> >>> since is not the way it is written in the documentation, like on this<br>
>>> >>> pages:<br>
>>> >>> <a href="http://clang.llvm.org/docs/LibTooling.html" target="_blank">http://clang.llvm.org/docs/LibTooling.html</a><br>
>>> >>> <a href="http://clang.llvm.org/docs/LibASTMatchersTutorial.html" target="_blank">http://clang.llvm.org/docs/LibASTMatchersTutorial.html</a><br>
>>> >><br>
>>> >><br>
>>> >> Thanks, I've updated the documentation.<br>
>>> ><br>
>>> > I'm trying to understand how the ownership used to work/is meant to<br>
>>> > work now...<br>
>>><br>
>>> The result of newFrontendActionFactory() used to be leaked. Now it's<br>
>>> freed at the end-of-statement cleanup of the returned (invisible)<br>
>>> unique_ptr temporary.<br>
>><br>
>><br>
>> Why do we need to heap-allocate the FrontendActionFactory at all?<br>
><br>
><br>
> Technically we don't. There's just some ways to create the<br>
> FrontendActionFactory via templated factory functions<br>
<br>
</div></div>The current factories don't seem to make dynamic choices (or even<br>
templated choices) about which type to return (I may've missed<br>
something, though) - and the internal templating could still be<br>
implemented via a ctor template instead, I think.<br></blockquote><div><br></div><div>How would it store the pointer to the FactoryT* ConsumerFactory? Sure, a templated class would work (basically just instantiate the FrontendActionFactoryAdapter), but the problem is that then you'd always need to specify the template argument.</div>
<div><br></div><div>Also, there is an overload newFrontendActionFactory<FrontendActionType>(), and I think it has value that those form similar patterns.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class=""><br>
> that we want to work<br>
> with pointers (because they have identity - we want the same one to be<br>
> passable to different runs and work with the data).<br>
<br>
</div>In terms of pointer identity - the idea would be to create a<br>
FrontendActionFactory as a direct (rather than unique_ptr) local<br>
variable and pass it to each run call - the object would never move<br>
around, so pointers to it would remain valid throughout its lifetime.<br>
<br>
Or am I picturing something different from what you have in mind?<br>
<span class="HOEnZb"><font color="#888888"><br>
- David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
>><br>
>><br>
>> _______________________________________________<br>
>> cfe-dev mailing list<br>
>> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
</div></div></blockquote></div><br></div></div>