LGTM with a fix for the memory leak.

================
Comment at: lib/Frontend/CompilerInvocation.cpp:526
@@ +525,3 @@
+    std::string RegexError;
+    Opts.OptimizationRemarkPattern = new llvm::Regex(Val);
+    if (!Opts.OptimizationRemarkPattern->isValid(RegexError)) {
----------------
Diego Novillo wrote:
> Richard Smith wrote:
> > Diego Novillo wrote:
> > > Richard Smith wrote:
> > > > It looks like this is leaked. Maybe use an 
> > > > `llvm::Optional<llvm::Regex>` instead?
> > > I tried but llvm::Regex has an explicitly deleted constructor. I'm not 
> > > sure how to deal with that, so I ended up using regular pointer semantics.
> > `llvm::Optional` shouldn't call the `llvm::Regex` default constructor.
> 
> Sure, but it's trying to when instantiating CodeGenOptions:
> 
> llvm/include/llvm/ADT/Optional.h:39:28: error: call to deleted constructor of 
> 'llvm::Regex'
>       new (storage.buffer) T(*O);
>                            ^ ~~
> llvm/tools/clang/include/clang/Frontend/CodeGenOptions.h:39:7: note: in 
> instantiation of member function 'llvm::Optional<llvm::Regex>::Optional' 
> requested here
> class CodeGenOptions : public CodeGenOptionsBase {
>       ^
> llvm/include/llvm/Support/Regex.h:49:5: note: 'Regex' has been explicitly 
> marked deleted here
>     Regex(const Regex &) LLVM_DELETED_FUNCTION;
>     ^
> 1 error generated.
> 
> 
> I'm not quite sure how to deal with this.  All I'm doing is:
> 
> -  llvm::Regex *OptimizationRemarkPattern;
> +  llvm::Optional<llvm::Regex> OptimizationRemarkPattern;
> 
> I feel like I'm missing something.
Oh, I see. What this crummy diagnostic is trying to tell you is that `Regex` 
isn't copyable, but someone is trying to make a copy of the `CodeGenOptions` 
object somewhere (we don't actually say where, due to an interaction of 
recursive special member generation and delayed function template 
instantiation...). `CodeGeneratorImpl::CodeGenOpts` does this, there might be 
other places.

Next idea: use `std::shared_ptr<llvm::Regex>`.


http://reviews.llvm.org/D3226

BRANCH
  opt-report

ARCANIST PROJECT
  clang



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to