sepavloff added a comment.

In http://reviews.llvm.org/D15450#354606, @yaron.keren wrote:

> It certainly makes sense to redirect the module request to its owner instead 
> of duplicating it in a local copy.


It is not even a duplication, it is simultaneous sharing by two unique_ptr's.

> There may be a change in behaviour here, pre-patch 
> CodeGenAction::EndSourceFileAction() would take the BackendConsumer Module, 
> keeping CodeGen Module intact whereas post-patch it takes the CodeGen Module.

>  How does this work out?


It should not be a problem. CodeGenAction::EndSourceFileAction() is called when 
code generation is finished, so taking ownership from GodeGen looks safe. 
Anyway, module must not be owned by two unique_ptr's.

There are at least 3 unique_ptr's that owns the same module object:

- CodeGenAction::TheModule
- BackendConsumer::TheModule
- CodeGeneratorImpl::M

It looks like CodeGenAction::TheModule does not cause any problem, it takes 
ownership according to usual unique_ptr semantics. But the last two variables 
owns the same object simultaneously, which violates semantics of unique_ptr. 
The patch fixes ownership by allowing only CodeGeneratorImpl::M to be an owner.


http://reviews.llvm.org/D15450



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to