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