diff options
author | Nico Weber <nicolasweber@gmx.de> | 2014-04-24 05:32:03 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2014-04-24 05:32:03 +0000 |
commit | 568dacc4aa018a2ea4e284c903ebdc2340bd20bc (patch) | |
tree | 9a8ed2947c4ca28ec7ad856f7423c2d2d00c1e2b /clang/lib/Frontend/VerifyDiagnosticConsumer.cpp | |
parent | aacf0313a5076eedfff8395507c6617c2144d6bf (diff) | |
download | bcm5719-llvm-568dacc4aa018a2ea4e284c903ebdc2340bd20bc.tar.gz bcm5719-llvm-568dacc4aa018a2ea4e284c903ebdc2340bd20bc.zip |
Don't leak invalid RegexDirectives. Probably a small part of PR19520.
llvm-svn: 207077
Diffstat (limited to 'clang/lib/Frontend/VerifyDiagnosticConsumer.cpp')
-rw-r--r-- | clang/lib/Frontend/VerifyDiagnosticConsumer.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp b/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp index 0221a5550c0..407c1d32972 100644 --- a/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp +++ b/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp @@ -491,11 +491,12 @@ static bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, } // Construct new directive. - Directive *D = Directive::create(RegexKind, Pos, ExpectedLoc, Text, - Min, Max); + std::unique_ptr<Directive> D( + Directive::create(RegexKind, Pos, ExpectedLoc, Text, Min, Max)); + std::string Error; if (D->isValid(Error)) { - DL->push_back(D); + DL->push_back(D.release()); FoundDirective = true; } else { Diags.Report(Pos.getLocWithOffset(ContentBegin-PH.Begin), @@ -880,5 +881,6 @@ Directive *Directive::create(bool RegexKind, SourceLocation DirectiveLoc, } } - return new RegexDirective(DirectiveLoc, DiagnosticLoc, Text, Min, Max, RegexStr); + return new RegexDirective(DirectiveLoc, DiagnosticLoc, Text, Min, Max, + RegexStr); } |